Aqui está outra maneira de fazer isso usando
UNION
s. Eu acho que isso é um pouco mais fácil de entender e mais flexível do que a resposta aceita. Observe que o exemplo assume o id
campo é único, o que parece ser o caso com base na sua pergunta. A consulta SQL abaixo assume que sua tabela é chamada
demo
e tem um único id
exclusivo campo e a tabela foi preenchida com os valores listados em sua pergunta. ( SELECT id FROM demo WHERE STRCMP ( 'd01', id ) > 0 ORDER BY id DESC LIMIT 1 )
UNION ( SELECT id FROM demo WHERE id = 'd01' ORDER BY id ) UNION
( SELECT id FROM demo WHERE STRCMP ( 'd01', id ) < 0 ORDER BY id ASC LIMIT 1 )
ORDER BY id
Ele produz o seguinte resultado:
b03, d01, d02
. Esta solução é flexível porque você pode alterar cada um dos
LIMIT 1
instruções para LIMIT N
onde N
é qualquer número. Dessa forma, você pode obter as 3 linhas anteriores e as 6 linhas seguintes, por exemplo.