Hier is een andere manier om het te doen met UNION
s. Ik denk dat dit iets gemakkelijker te begrijpen en flexibeler is dan het geaccepteerde antwoord. Merk op dat in het voorbeeld wordt uitgegaan van de id
veld is uniek, wat het geval lijkt te zijn op basis van uw vraag.
De onderstaande SQL-query gaat ervan uit dat uw tabel demo
heet en heeft een enkele unieke id
veld en de tabel is gevuld met de waarden die u in uw vraag hebt vermeld.
( 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
Het levert het volgende resultaat op:b03, d01, d02
.
Deze oplossing is flexibel omdat u elk van de LIMIT 1
. kunt wijzigen verklaringen tot LIMIT N
waar N
is een willekeurig nummer. Op die manier kunt u bijvoorbeeld de vorige 3 rijen en de volgende 6 rijen krijgen.