mysql - 按非唯一字段排序时获取 'next' 和 'previous'

标签 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 并且该集合按 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 - 按非唯一字段排序时获取 'next' 和 'previous',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25661209/

相关文章:

mysql - node.js mySQL 发送具有 INSERT 语句格式的数组

sql - 如何在 View 中添加 ROW_NUMBER()?

SQL 外键数组引用非数组

在数组中查找重复项的算法

algorithm - 是否可以创建一个生成自动图的算法?

algorithm - 如何找到无向图的两个不相交的生成树

mysql - 在 Phalcon 查询构建器中使用类似于 CASE WHEN 的东西

php - 操作后重绘数据表

php - 基思·伍兹倒计时器 DATETIME 格式 Jquery

sql - 从表中删除具有相同 ID 的重复行