Ecco un altro modo per farlo usando UNION
S. Penso che questo sia un po 'più facile da capire e più flessibile della risposta accettata. Nota che l'esempio presuppone l'id
il campo è unico, il che sembra essere il caso in base alla tua domanda.
La query SQL di seguito presuppone che la tua tabella si chiami demo
e ha un unico id
campo e la tabella è stata compilata con i valori che hai elencato nella tua domanda.
( 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
Produce il seguente risultato:b03, d01, d02
.
Questa soluzione è flessibile perché puoi modificare ciascuno dei LIMIT 1
istruzioni a LIMIT N
dove N
è un numero qualsiasi. In questo modo puoi ottenere, ad esempio, le 3 righe precedenti e le 6 righe successive.