私は自分の状況にかなり行き詰まっています。フィールド id、showid、season、episode、およびその他の任意のデータを含むデータベースがあります。idをget変数として使用することで機能するショーのエピソードに関する情報を表示するphpページがあります。私が達成したいのは、このテレビ番組の次のエピソードと前のエピソードへのリンクを作成することですが、番組は必ずしも順番どおりであるとは限らないため、単に ID を増減しても役に立ちません。したがって、エピソードを取得して保存$rows
し、次のMySQL
クエリを使用します。
SELECT id FROM episodes WHERE showid = $id ORDER BY season, episode;
配列をループすることなく (一部のショーではかなり大きくなる可能性があります)、次のエピソードと前のエピソードを簡単に見つける方法はありますか? 私はそれを考えられないだけだと確信しています。
編集: 私はこれについて自分で考えてきましたが、まだ役立つものは何もありません(助けてくれてありがとう、とても感謝しています)。私が考えたのは、同じシーズンのより高いエピソードが存在するかどうかを確認するクエリを作成し、そうでない場合は、次の最も低いシーズンの最も低いエピソードを見つけるために別のクエリを作成することです。どう思いますか?
編集 2: 将来の参照用に最終的なコードを投稿すると思いました。ここで、nex と以前のショーの ID を見つけます (存在する場合)。
次のエピソードを探す:
try {
// First check for a show of the same season but the next lowest episode number
$stmt = $dbh->prepare("SELECT id FROM episodes WHERE showid = :show AND season = :s AND episode > :e ORDER BY episode LIMIT 1;");
$stmt->execute($pars);
$rows = $stmt->fetchAll();
if(count($rows) > 0) { // If there is one this is our next id
$nextid = $rows[0]['id'];
} else {
// Otherwise check for an episode of a higher season number
$stmt = $dbh->prepare("SELECT id FROM episodes WHERE showid = :show AND season > :s ORDER BY season, episode LIMIT 1;");
$stmt->execute($pars);
$rows = $stmt->fetchAll();
if(count($rows) > 0) { // If there is one this is our next id.
$nextid = $rows[0]['id'];
} // Otherwise no next id is set and so no next link will be created.
}
} catch(PDOException $e) {
die("Error: " . $e->getMessage());
}
前のエピソードを見つける:
try {
// First check for an episode in same season of the next highest episode number.
$stmt = $dbh->prepare("SELECT id FROM episodes WHERE showid = :show AND season = :s AND episode < :e ORDER BY episode DESC LIMIT 1;");
$stmt->execute($pars);
$rows = $stmt->fetchAll();
if(count($rows) > 0) { // If one is found then this is our prev id.
$previd = $rows[0]['id'];
} else {
// Otherwise check for an episode of a lower season number.
$stmt = $dbh->prepare("SELECT id FROM episodes WHERE showid = :show AND season < :s ORDER BY season DESC, episode DESC LIMIT 1;");
$stmt->execute($pars);
$rows = $stmt->fetchAll();
if(count($rows) > 0) { // If there is one this is our prev id.
$previd = $rows[0]['id'];
} // Otherwise no prev id is set and so no prev link will be created.
}
} catch(PDOException $e) {
die("Error: " . $e->getMessage());
}
次に、次のリンクがあります。
if($previd) echo "<a href=\"/tv/view/" . $previd . "/\">Previous Episode</a>";
if($nextid) echo "<a href=\"/tv/view/" . $nextid . "/\">Next Episode</a>";