This is the example table:
Column | 1st record | 2nd record | 3rd record | 4th record | etc
id (primary) | 1 | 5
This works:
select a.id, a.name, a.date, a.callValue
FROM
(
select @r0 := @r0 + 1 as rownum, id, name, date, callValue from TABLE
, (SELECT @r0 := 0) r0
) a,
(
select @r1 := @r1 + 1 rownum, id, name, date, callValue from TABLE
, (SELECT @r1 := 0) r1
) b
where b.callValue = val3 and b.rownum between (a.rownum-1 and a.rownum+1)
It expands the table into 2 dimensions so you can compare the rows in the fist table to any set of rows from the second.
Once you have the id 8, you should be able to do a variation on:
select * from mytable
where id < 8
order by id desc
limit 1
and:
select * from mytable
where id > 8
order by id asc
limit 1
for the previous and next record.
select *
from callvalue
where id < maxd
(
select max(id) as maxd
from callvalue
where id = maxd
)
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)