Här är ett annat sätt att göra det med UNION
s. Jag tror att detta är lite lättare att förstå och mer flexibelt än det accepterade svaret. Observera att exemplet antar id
fältet är unikt, vilket verkar vara fallet baserat på din fråga.
SQL-frågan nedan antar att din tabell heter demo
och har ett unikt id
och tabellen har fyllts i med de värden du angav i din fråga.
( 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
Det ger följande resultat:b03, d01, d02
.
Denna lösning är flexibel eftersom du kan ändra var och en av LIMIT 1
satser till LIMIT N
där N
är vilket nummer som helst. På så sätt kan du till exempel få de 3 föregående raderna och de följande 6 raderna.