Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Select before and after rows around id with mysql

Tags:

sql

mysql

I need to get the IDs around an ID with mySQL.

Example:

IDs ​​in the table:

2, 4, 5, 9, 11, 15, 19, 22, 25

I need to know the 5 IDs around the ID 9, for example. The query should return:

4, 5, 9, 11, 15

Thanks!

like image 444
Hugo Demiglio Avatar asked Apr 11 '12 07:04

Hugo Demiglio


People also ask

What is `` in MySQL?

People uses `` to surround field names and use '' to surround values. Is that true? Or the major reason to do so is because then we can put the code in a text file and import into the database. thank you. mysql.

How do I select the first and last row in SQL?

To get the first and last record, use UNION. LIMIT is also used to get the number of records you want.

How do I find the next record in MySQL?

You can use UNION to get the previous and next record in MySQL. Insert some records in the table using insert command. Display all records from the table using select statement.


1 Answers

A possible solution would be to

  • calculate the absolute value of each id where you subtract your ID.
  • order the results and limit the resultset to 5 records.

SQL Statement

SELECT ABS(ID - 9), *
FROM   MyTable
ORDER BY
       ABS(ID - 9)
LIMIT  5

Edit (thx to ypercube for pointing out a possible flaw in this solution)

If the intent is to get 2 id's from the left and two id's from the right, the statement can be adjusted as follows

SELECT * FROM MyTable WHERE ID <= 9 ORDER BY ID DESC LIMIT 3 
UNION ALL
SELECT * FROM MyTable WHERE ID > 9  ORDER BY ID ASC  LIMIT 2
like image 66
Lieven Keersmaekers Avatar answered Oct 12 '22 00:10

Lieven Keersmaekers