Mysql Select Next & Prev row not order by id

Luca picture Luca · Dec 16, 2010 · Viewed 8.6k times · Source

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 ?

Answer

zerkms picture zerkms · Dec 16, 2010
  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.