我有图像库。每张图片的评分都是基于有多少用户投票“我喜欢这个”。 MySQL表的这种笑话是这样的:MySQL查询:使用非唯一值排序列表时,获取下一个或上一个项目
id |image |rating
------------------------------------
166 |6.png |9
165 |8.png |9
189 |1.png |8
171 |99.png |8
169 |56.png |8
155 |34.png |8
265 |7.png |7
754 |86.png |6
166 |37.png |4
342 |95.png |2
99 |35.png |0
76 |34.png |0
44 |3.png |0
8 |22.png |0
任务是:可以查看按评级排序的画廊。使用ORDER BY rating DESC, id DESC
很容易列出图像,但用户点击图像时出现问题,我必须在打开的图像旁边显示“上一张图像”和“下一张图像”按钮。
假设我们现在看到的与示例表ID = 169的图像:
id |image |rating
------------------------------------
169 |99.png |8
我怎么能写我的查询,以获得一张图像(ID = 171)?问题是,主要排序是rating
(这不是唯一的)和次要是由唯一的id
。在任何情况下,哪个查询都会给我正确的以前的图像。
我已经试过:
SELECT *
FROM images
WHERE rating >= 8 AND id >=169
ORDER BY rating, id
LIMIT 1
,但它并没有这样做,因为id >=169
必须检查只有等级相同。
我有点困惑,请帮助我。
UPDATE
想通了这一个我自己。假设我对当前记录的rating
和id
值,查询得到此前的纪录是:
SELECT *
FROM `images`
WHERE
(`rating` = 8 AND `id` > 169)
OR `rating` > 8
ORDER BY `rating`, `id`
LIMIT 1
如果rating = 8 AND id > 169
没有评估,然后rating > 8
进入游戏。原来很简单。
谢谢大家!接受大多数赞成的答案。
我不明白。你不能写另一个查询来选择下一个图像,按ID排序? – thomaux 2010-11-04 12:10:30
@Anzeo nope,他不能。他的图像不是按照id排序的,而是按评分排序的。 – 2010-11-04 12:16:33
如果你想获得上一个记录,你需要ORDER BY DESC。这种方式'评级'<8不会触发第一个最低评级的条目。 – theflamingskunk 2014-03-10 18:30:57