10

我有一个数据库,我想使用单个查询找出按 ID 排序的上一条和下一条记录。我试图做一个工会,但这不起作用。:(

SELECT * FROM table WHERE `id` > 1556 LIMIT 1
UNION 
SELECT * FROM table WHERE `id` <1556 ORDER BY `product_id` LIMIT 1

有任何想法吗?非常感谢。

4

1 回答 1

17

你需要改变你的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语句中命名你的列。

于 2009-07-05T16:38:35.500 回答