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.