【问题标题】:How to find the previous and next record using a single query in MySQL?如何在 MySQL 中使用单个查询查找上一条和下一条记录?
【发布时间】: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

有什么想法吗? 非常感谢。

【问题讨论】:

    标签: mysql nearest-neighbor


    【解决方案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 语句中命名您的列。

    【讨论】:

    • 感谢您的回答,我只是从懒惰中添加 * 在这里写任何列,我确实在实际代码中命名了它们 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2010-11-29
    • 1970-01-01
    相关资源
    最近更新 更多