How to find the previous and next record using a single query in MySQL?
Asked Answered
H

1

10

I have a database, and I want to find out the previous and next record ordered by ID, using a single query. I tried to do a union but that does not work. :(

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

Any ideas? Thanks a lot.

Hinkel answered 5/7, 2009 at 16:36 Comment(0)
I
17

You need to change up your 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

This ensures that the id field is in the correct order before taking the top result.

You can also use MIN and MAX:

SELECT
    * 
FROM
    table 
WHERE 
    id = (SELECT MIN(id) FROM table where id > 1556) 
    OR id = (SELECT MAX(id) FROM table where id < 1556)

It should be noted that SELECT * is not recommended to have in production code, though, so name your columns in your SELECT statement.

Inwrap answered 5/7, 2009 at 16:38 Comment(1)
thanks for your answer, i only added * from laziness to write any columns here, i do have them named in the actual code :)Hinkel

© 2022 - 2024 — McMap. All rights reserved.