【发布时间】:2009-07-05 16:36:30
【问题描述】:
我有一个数据库,我想使用单个查询找出按 ID 排序的上一条和下一条记录。我试图做一个工会,但这不起作用。 :(
SELECT * FROM table WHERE `id` > 1556 LIMIT 1
UNION
SELECT * FROM table WHERE `id` <1556 ORDER BY `product_id` LIMIT 1
有什么想法吗? 非常感谢。
【问题讨论】:
我有一个数据库,我想使用单个查询找出按 ID 排序的上一条和下一条记录。我试图做一个工会,但这不起作用。 :(
SELECT * FROM table WHERE `id` > 1556 LIMIT 1
UNION
SELECT * FROM table WHERE `id` <1556 ORDER BY `product_id` LIMIT 1
有什么想法吗? 非常感谢。
【问题讨论】:
您需要更改您的ORDER BY:
SELECT * FROM table WHERE `id` > 1556 ORDER BY `id` ASC LIMIT 1
UNION
SELECT * FROM table WHERE `id` < 1556 ORDER BY `id` DESC LIMIT 1
这可确保id 字段的顺序正确,然后才能获得最高结果。
你也可以使用 MIN 和 MAX:
SELECT
*
FROM
table
WHERE
id = (SELECT MIN(id) FROM table where id > 1556)
OR id = (SELECT MAX(id) FROM table where id < 1556)
应该注意的是,不建议在生产代码中使用SELECT *,因此请在SELECT 语句中命名您的列。
【讨论】: