【问题标题】:Getting 'next' and 'previous' when sorted by field that is not unique按非唯一字段排序时获取“下一个”和“上一个”
【发布时间】: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


    【解决方案1】:

    【讨论】:

    • 感谢您的回答。不确定,mysql 在 SQL Server 中有类似 ROW_NUMBER() 的东西。无论如何,我认为为此使用临时表是一种矫枉过正...
    猜你喜欢
    • 2018-05-17
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多