我有一个SQL数据库,表名:视频,我存储视频。
此表中的相关列为:id,category_id
和video_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,无论是否有镜像。
答案 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
他们,所以你只需要查询一次。