【发布时间】:2014-10-28 22:49:34
【问题描述】:
我正在制作一个图片库。用户可以按评分对该图库进行排序:
SELECT *
FROM images
WHERE album_id=8
ORDER BY rating DESC, id DESC
LIMIT 0, 10
这将产生图像列表,我很乐意向用户显示:
image_id | rating
--------------------
25 | 10
23 | 10
18 | 9
16 | 9 -- user will click here
15 | 9
89 | 8
67 | 8
60 | 8
5 | 8
101 | 3
之后,用户点击此图片:
image_id | rating
--------------------
16 | 9
现在,我需要编写一个 SQL 查询,它将找出集合中的下一个和上一个图像是什么,以相应地显示链接,只知道 image_id 并且该集合是按rating DESC, id DESC排序。
任务似乎微不足道,但我该怎么做呢?解决这个问题的常用方法是什么?
我尝试过这样的事情:
-- get next image
SELECT *
FROM images
WHERE
album_id=8
AND rating <= 9 -- rating of current image
AND image_id < 16 -- id of current image
ORDER BY rating DESC, id DESC
LIMIT 1
但这对我不起作用,以防下一条记录有不同的评级。
考虑到用户可以选择排序方向和多个参数,有没有更优雅的方法来解决这个问题?
附:我正在为此使用 Django ORM,但简单 SQL 的答案很好。
【问题讨论】:
标签: mysql sql algorithm sorting