SQL“previous”查询的意外结果

时间:2015-02-19 01:18:12

标签: mysql

我试图从数据库中获取前一个图像,其中图像按其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.

1 个答案:

答案 0 :(得分:1)

首先:SELECT id FROM images WHERE id = :id是NOOP。现在你想要的是,ID最高的行小于给定的 - 这应该不会太难:

SELECT *
FROM `images`
WHERE id<:id
ORDER BY id DESC
LIMIT 1
;