mysql - SQL "previous"查询的意外结果

标签 mysql

我正在尝试从数据库中获取上一张图像,其中图像按 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/

相关文章:

php - 尝试将小计乘以运费百分比以获得总计

php - 水平数据的平均值 mysql php

php - MySQL查询,如何多种方式使用字符串?

mysql - 如果目标表不存在,则重命名表

mysql - 从一列中使用 SUM 和 GROUP BY 为另一列选择 MAX,没有子查询

JTable 单元格更改上的 JAVA 更新数据库

php - MySQLi - numrows 查询问题

MySQL 触发器不适用于表插入

php - 使用 codeigniter 更新记录时出错

php - Laravel 查询生成器中的复杂查询