MySQL在行之后选择

bos*_*maj 12 mysql row surround

这是示例表:

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
Run Code Online (Sandbox Code Playgroud)

我选择一行作为要显示的数据(例如:具有callValue的行:val3).但我无法找到解决方案:
我需要选择上一行和下一行.所以,在这个例子中,我需要从行vallValue:val4和callValue:val2,或id:5和id:12获取数据.

它不能用id= id+ -1 来完成,id因为删除行不必是连续的.

And*_*nov 27

试试这个:

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) 
Run Code Online (Sandbox Code Playgroud)

要么

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) 
Run Code Online (Sandbox Code Playgroud)


pax*_*blo 13

获得ID后8,您应该可以对以下内容进行修改:

select * from mytable
where id < 8
order by id desc
limit 1
Run Code Online (Sandbox Code Playgroud)

和:

select * from mytable
where id > 8
order by id asc
limit 1
Run Code Online (Sandbox Code Playgroud)

对于上一个和下一个记录.

  • 这个解决方案更短,更好地了解每个人. (4认同)
  • 你怎么知道这对每个人都更好?你可能意味着它对你自己更好. (3认同)
  • 它更短,它使用更简单的语法,更具可读性,并具有卓越的性能.我认为可以说它整体上更好. (3认同)