0

我有一个 SQL 数据库,表名:视频,我在其中存储视频。此表中的相关列是:id、thecategory_idvideo_id

id,是一个唯一的id,每一个视频不管哪个类别都有不同的id,同样的id不可能不管类别。

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

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

出现视频的客户端页面仅通过分配的 id 来回忆他们的视频;比方说: - 有人打开有趣的类别。然后客户端查看:from tablename videos where category_idis 1. - 所以假设有一个名为“Funny Fails”的视频,有两个镜像 YouTube 和 Vimeo,所以两行都有不同的 id,但相同video_id。YouTube 的 Funny Fails 镜像由于某种原因得到了 id 1,而 Vimeo 得到了 id 2(为简单起见),当然这两个视频都有video_id1 并且在category_id1 内。

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

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

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

假设我们正在浏览 ID video_id110、123 里面category_id1 它没有镜像。

如果我们按 Previous Video 它应该寻找:video_id122 inside category_id1 和动态部分,id 本身。此 ID 也是构成页面的链接的一部分,例如,这与后面的 id 相同.php?id=XXX

我一直在挣扎,我知道解决方案要简单得多,但不知何故我无法做到。

还应该有一个 Next Video 选项,它显然会video_id在同一个 124 中寻找category_id,无论是否有镜子。

4

1 回答 1

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使用它们,因此您只需查询一次。

于 2012-12-12T22:44:24.067 回答