MYSQL:查询获取上一个和下一个视频ID?

时间:2009-07-04 09:11:00

标签: php sql database mysql

我正在开发一个视频网站(PHP - MYSQL),就像youtube一样,我希望在其中提供Next视频和Previous视频的功能。假设我目前正在使用videoId: 234,因此下一个和上一个视频链接将分别指向videoId: 233235

我的表格结构如下:

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,因为没有先前的记录,在最后一条记录的情况下也是如此。

请告诉我如何查询?

由于

5 个答案:

答案 0 :(得分:3)

我认为你可以使用类似的东西:

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))

答案 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

答案 2 :(得分:0)

这将获得下一个

$stmt = $PDO->prepare("SELECT * FROM vedios WHERE vedio > :id AND IsActive = 1")
$stmt->execute(array("id" => $id));
$all = $stmt->fetchAll(PDO::FETCH_ASSOC);

并更改&gt;到&lt;以前的。如果count($all)返回0,那么您没有下一个/上一个视频。

答案 3 :(得分:0)

试试这个。完全未经测试,但这将为您提供一个正常的行,其中包含两个额外的列'nextID'和'prevID'。如果其中一个为null,则没有一个。

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

如果您有任何问题/错误,请告诉我,我会正确测试。

答案 4 :(得分:0)

最佳查询字符串:

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