如何在MySQL中使用单个查询查找上一条和下一条记录?

Gab*_*mon 8 mysql nearest-neighbor

我有一个数据库,我希望使用单个查询找出按ID排序的上一个和下一个记录.我试图做一个联盟,但这不起作用.:(

SELECT * FROM table WHERE `id` > 1556 LIMIT 1
UNION 
SELECT * FROM table WHERE `id` <1556 ORDER BY `product_id` LIMIT 1
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*ric 16

你需要改变你的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
Run Code Online (Sandbox Code Playgroud)

这样可以确保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)
Run Code Online (Sandbox Code Playgroud)

应该注意的SELECT *是,不建议在生产代码中使用,因此请在SELECT语句中命名列.