如何在TABLE中选择上一个/下一个ROW,其中COLUMN-VALUE

时间:2012-12-12 22:15:33

标签: php html mysql

我有一个SQL数据库,表名:视频,我存储视频。 此表中的相关列为:id,category_idvideo_id

id是唯一的ID,每个视频无论哪个类别具有不同的ID,无论类别如何,都不可能使用相同的ID。

category_id也是唯一的,并且每个都被分配到一个类别,例如搞笑是1。

对于video_id,可以为此列提供多个具有相同值的行。例如,如果一个视频在YouTube上托管,并且在Vimeo上托管的视频完全相同。然后我们有镜子。没错,你在想什么?好吧,数据库只将嵌入代码存储到视频中,并由页面调用。

视频出现的客户端页面只是通过指定的ID回忆他们的视频;让我们说: - 有人打开类别搞笑。然后客户端看起来:来自tablename视频category_id为1。 - 所以我们假设有一个名为Funny Fails的视频,有两个镜像YouTube和Vimeo,因此两个行的ID都不同,但video_id相同。 YouTube的Funny Fails镜子因为某种原因得到了id 1,而Vimeo得到了id 2(简单起见),当然这两个视频都有video_id 1并且在category_id 1内。

客户端.php只是查找id,例如:/category_detail.php?id=1/videopage.php?id=1

现在您最有可能了解数据库以及客户端如何从数据库中检索信息。

我们想要做的只是在客户端向页面添加两个选项。这些是之前的视频和下一个视频。

假设我们正在video_id内浏览ID 110,category_id 123 1它没有镜像。

如果我们按上一个视频,它应该在video_id 1内找到category_id 122和动态部分,即id本身。此ID也是链接的一部分,使页面成为例如这与.php?id=XXX之后的ID相同。

我已经磕磕绊绊了一段时间,我知道解决方案要简单得多,但我不知道怎么办。

还应该有一个Next Video选项,显然会在同一video_id内查找category_id 124,无论是否有镜像。

1 个答案:

答案 0 :(得分:1)

一个:

  SELECT * FROM videos WHERE category_id = 1 AND video_id < 123 
  ORDER BY video_id DESC LIMIT 1;

下一步:

  SELECT * FROM videos WHERE category_id = 1 AND video_id > 123 
  ORDER BY video_id ASC LIMIT 1;

正如比尔正确地说的那样,你可以UNION他们,所以你只需要查询一次。