Voici une autre façon de le faire en utilisant UNION s. Je pense que c'est un peu plus facile à comprendre et plus flexible que la réponse acceptée. Notez que l'exemple suppose le id champ est unique, ce qui semble être le cas d'après votre question.
La requête SQL ci-dessous suppose que votre table s'appelle demo et a un seul id unique champ, et le tableau a été rempli avec les valeurs que vous avez énumérées dans votre question.
( 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
Il produit le résultat suivant :b03, d01, d02 .
Cette solution est flexible car vous pouvez modifier chacun des LIMIT 1 déclarations à LIMIT N où N est n'importe quel nombre. De cette façon, vous pouvez obtenir les 3 lignes précédentes et les 6 lignes suivantes, par exemple.