This is the example table:
Column | 1st record | 2nd record | 3rd record | 4th record | etc<br />
id (primary) | 1 | 5 | 8 | 12 | etc<br />
name | name 1 | name 2 | name 3 | name 4 | etc<br />
date | date 1 | date 2 | date 3 | date 4 | etc<br />
callValue (unique) | val1 | val2 | val3 | val4 | etc
I select one row that is the data to show (for example: row with callValue: val3). But I cannot find a solution for this:
I need to select previous and next row. So, in this example, I need to get data from rows callValue: val4 and callValue: val2, or id: 5 and id: 12.
It cannot be done with id
=id
+-1 because id
doesn't have to be continuous because of deleting rows.
Try this:
select * from test where callValue = 'val3'
union all
(select * from test where callValue < 'val3' order by id desc limit 1)
union all
(select * from test where callValue > 'val3' order by id asc limit 1)
or
select * from test where id = 8
union all
(select * from test where id < 8 order by id desc limit 1)
union all
(select * from test where id > 8 order by id asc limit 1)