Search code examples
mysqlselectrow

Mysql Select Next & Prev row not order by id


I have a query ordered by NAME that return smt like this:

 ID     NAME
2121927 AAA
2123589 AAB
2121050 AAC
2463926 BBB ---> known ID
2120595 CCC
2122831 DDD
2493055 EEE
2123583 EEF

I need to know the next ID and the prev ID (if exists) of known ID && NAME How is it possible with only 1 query ?


Solution

  •   SELECT *,
             'next'
        FROM table
       WHERE `name` > 'BBB'
    ORDER BY `name`
       LIMIT 1
    
    UNION
    
      SELECT *,
             'previous'
        FROM table
       WHERE `name` < 'BBB'
    ORDER BY `name` DESC
       LIMIT 1
    

    If you don't know particular BBB name field value - you could replace it with subquery like SELECT name FROM table WHERE id = 42, where 42 is the known ID value.