SET @current_episode = 1;
SET @current_season = 2;
SET @current_serial = 2;
SELECT * FROM `episode` _episode
LEFT JOIN season _season ON _episode.season_id = _season.id
LEFT JOIN serial _serial ON _season.serial_id = _serial.id
WHERE
(_episode.episode < @current_episode AND _season.season = @current_season)
OR
(_episode.episode > @current_episode AND _season.season = (@current_season - 1))
ORDER BY _season.season DESC, _episode.episode ASC
LIMIT 0,1
剧集表格结构:
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| season_id | int(11) | YES | MUL | NULL | |
| poster_id | int(11) | YES | MUL | NULL | |
| episode | int(11) | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
季节表结构:
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| serial_id | int(11) | YES | MUL | NULL | |
| season | int(11) | NO | | NULL | |
串行表结构:
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
我的SQL无法正确找到上一集 因为如果我尝试通过季节DESC发现它将是正确的,而剧集编号不是季节的第一集。
答案 0 :(得分:3)
只需在WHERE
之后更新OR
子句,然后在_episode.episode上排序DESC
SET @current_episode = 1;
SET @current_season = 2;
SET @current_serial = 2;
SELECT * FROM `episode` _episode
LEFT JOIN season _season ON _episode.season_id = _season.id
LEFT JOIN serial _serial ON _season.serial_id = _serial.id
WHERE
(_episode.episode < @current_episode AND _season.season = @current_season)
OR
(_season.season < @current_season)
ORDER BY _season.season DESC, _episode.episode DESC
LIMIT 0,1