Her er en anden måde at gøre det på ved hjælp af UNION
s. Jeg synes, det er lidt nemmere at forstå og mere fleksibelt end det accepterede svar. Bemærk, at eksemplet antager id
feltet er unikt, hvilket ser ud til at være tilfældet baseret på dit spørgsmål.
SQL-forespørgslen nedenfor antager, at din tabel hedder demo
og har et enkelt unikt id
felt, og tabellen er blevet udfyldt med de værdier, du har angivet i dit spørgsmål.
( 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 giver følgende resultat:b03, d01, d02
.
Denne løsning er fleksibel, fordi du kan ændre hver af LIMIT 1
sætninger til LIMIT N
hvor N
er et hvilket som helst tal. På den måde kan du f.eks. få de foregående 3 rækker og de følgende 6 rækker.