首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL在连续剧中找到前一集?

MySQL在连续剧中找到前一集?
EN

Stack Overflow用户
提问于 2017-02-09 18:38:10
回答 1查看 37关注 0票数 0
代码语言:javascript
复制
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

集表结构:

代码语言:javascript
复制
+-------------+--------------+------+-----+---------+----------------+
| 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    |                              |
+-------------+--------------+------+-----+---------+----------------+

季节表结构:

代码语言:javascript
复制
+------------+--------------+------+-----+---------+----------------+
| 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    |                |

串行表结构:

代码语言:javascript
复制
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |

我的SQL无法正确找到前一集,因为如果我尝试找到它的季节DESC,它将是近似值,而插集号不是第一集的季节。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-09 18:56:42

查找前一集

只需在WHERE之后更新OR子句,并在_episode.episode上对DESC进行排序

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42144441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档