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 找到它,它将是正确的,而剧集编号不是本季的第一集。
最佳答案
查找上一集
只需在 OR
之后更新 WHERE
子句,并在 _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
关于MySQL 连续查找上一集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42144441/