代码之家  ›  专栏  ›  技术社区  ›  Gabriel Solomon

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

  •  8
  • Gabriel Solomon  · 技术社区  · 15 年前

    我有一个数据库,我想用一个查询找出按ID排序的上一条和下一条记录。我曾试图组建工会,但没有成功(

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

    有什么想法吗? 谢谢。

    1 回复  |  直到 15 年前
        1
  •  17
  •   Eric    15 年前

    你需要换衣服 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 字段在获取顶部结果之前的顺序正确。

    您还可以使用最小值和最大值:

    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 陈述