按字段排序时,获取“下一个”和“上一个”并非唯一

时间:2014-09-04 08:55:55

标签: mysql sql algorithm sorting

我正在制作图片库。用户可以通过评级对此图库进行排序:

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和那个set按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

但是,如果下一条记录的评分不同,这对我不起作用。

有没有更优雅的方法来解决这个问题,因为用户可以选择排序方向和多个参数?

P.S。我正在使用Django ORM,但简单SQL中的答案很好。

1 个答案:

答案 0 :(得分:0)