MYSQL:查询以获取上一个和下一个视频ID?
Posted
技术标签:
【中文标题】MYSQL:查询以获取上一个和下一个视频ID?【英文标题】:MYSQL: Query to get previous and next video ID? 【发布时间】:2009-07-04 09:11:00 【问题描述】:我正在开发一个视频网站 (php - mysql
),就像 youtube,我想在其中提供 Next
视频和 Previous
视频的功能。假设我目前在videoId: 234
,所以下一个和上一个视频链接将分别指向videoId: 233
和235
。
我的表结构如下:
videoId videoName videoURL IsActive
-----------------------------------------------------
1 Love world love-world 1
2 Hello world hellow-world 1
3 World news world-news 0
4 The web the-web 1
5 Google web google-web 1
6 Internet internet 1
IsActive a bool (0,1) type column
基本上告诉视频是否可以在网站上观看。如果它的 0 - 不可见和 1 - 可见
现在有两种情况,我认为是:
当我浏览 videoId: 4 时,我想运行一个查询来获取下一个和上一个视频 id 分别表示 2 和 5,3 不是因为它被禁用。
李>其他条件是当我浏览 videoId: 1 时,查询应该只返回一条记录,即 2,因为没有以前的记录,与最后一条记录相同。
李>请告诉我如何查询这个?
谢谢
【问题讨论】:
在这里做了一堆假设,但考虑一下会发生什么情况:用户观看“Hello World”视频,管理员(或谁曾经)将“The Web”标记为非活动状态。该用户点击下一步。 【参考方案1】:我认为你可以使用类似的东西:
SELECT *
FROM videos AS c
WHERE (VideoId = (SELECT MAX(VideoId) FROM videos WHERE VideoId < c.VideoId AND IsActive = 1)
OR VideoId = (SELECT MIN(VideoId) FROM videos WHERE VideoId > c.VideoId AND IsActive = 1))
【讨论】:
【参考方案2】:我会用
SELECT * FROM videos WHERE videoId > :id AND IsActive = 1 LIMIT 1
UNION
SELECT * FROM videos WHERE videoId < :id AND IsActive = 1 LIMIT 1
【讨论】:
【参考方案3】:这将得到下一个
$stmt = $PDO->prepare("SELECT * FROM vedios WHERE vedio > :id AND IsActive = 1")
$stmt->execute(array("id" => $id));
$all = $stmt->fetchAll(PDO::FETCH_ASSOC);
然后将 > 更改为 count($all) 返回 0,那么您没有下一个/上一个视频。
【讨论】:
好的,但是是否可以使用单个查询同时获取两行中的下一个和上一个?【参考方案4】:试试这个。完全未经测试,但这会给你一个正常的行,其中包含两个额外的列“nextID”和“prevID”。如果其中一个为空,则没有一个。
SELECT v.*, n.id AS nextID, p.id AS prevID
FROM vedios v
LEFT JOIN (SELECT vn.id FROM vedios vn WHERE vn.id > v.id AND isActive = 1 ORDER BY id ASC LIMIT 1) n
LEFT JOIN (SELECT vp.id FROM vedios vp WHERE vp.id < v.id AND isActive = 1 ORDER BY id DESC LIMIT 1) p
如果您有任何问题/错误,请告诉我,我会正确测试。
【讨论】:
【参考方案5】:最佳查询字符串:
SELECT
(SELECT MAX(`id`) FROM `table` WHERE `id` < `t`.`id`) as `_prev_id`,
(SELECT MIN(`id`) FROM `table` WHERE `id` > `t`.`id`) as `_next_id`
FROM `table` `t`
WHERE `t`.`id` = '1'
LIMIT 1
【讨论】:
以上是关于MYSQL:查询以获取上一个和下一个视频ID?的主要内容,如果未能解决你的问题,请参考以下文章