我试图从数据库中获取前一个图像,其中图像按其ID号列出。经过一些研究后,我遇到了这个查询,它应该提供以前的结果。然而,它没有这样做。相反,它提供的第一个结果小于当前的id号。 (代码格式为PDO中的preparred语句,请忽略: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上,这将说明之前的图像&#34;是id 3,而不是id 6.
答案 0 :(得分:1)
首先:SELECT id FROM images WHERE id = :id
是NOOP。现在你想要的是,ID最高的行小于给定的 - 这应该不会太难:
SELECT *
FROM `images`
WHERE id<:id
ORDER BY id DESC
LIMIT 1
;