我正在尝试从数据库中获取上一张图像,其中图像按 ID 号列出。经过一番研究后,我遇到了这个查询,它应该提供之前的结果。然而它并没有这样做。相反,它提供小于当前 ID 号的第一个结果。 (代码格式为 PDO 中准备好的语句,请忽略 :name
变量。)
SELECT * FROM `images`
WHERE `category` = :cat
AND `id` = (SELECT `id` FROM `images` WHERE `id` = :id)
AND `id` < :id OR `id` < (SELECT `id` FROM `images` WHERE `id` = :id)
ORDER BY `id`
LIMIT 1
下面是表格的示例。
+----+-----------+----------+
| id | Image | Category |
+----+-----------+----------+
| 3 | image.png | 3 |
+----+-----------+----------+
| 6 | image.jpg | 3 |
+----+-----------+----------+
| 12 | anim.gif | 3 |
+----+-----------+----------+
现在,如果我在图像 12 上,这会说“上一个图像”的 id 为 3,而不是 id 6。
最佳答案
首先:SELECT id FROM images WHERE id = :id
是一个 NOOP。现在您想要的是具有小于给定值的最高 ID 的行 - 这应该不会太难:
SELECT *
FROM `images`
WHERE id<:id
ORDER BY id DESC
LIMIT 1
;
关于mysql - SQL "previous"查询的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28597119/