Oto inny sposób na zrobienie tego za pomocą UNION s. Myślę, że jest to trochę łatwiejsze do zrozumienia i bardziej elastyczne niż przyjęta odpowiedź. Zauważ, że przykład zakłada id pole jest unikalne, co wydaje się być w przypadku Twojego pytania.
Poniższe zapytanie SQL zakłada, że Twoja tabela nazywa się demo i ma jeden unikalny id pole, a tabela została wypełniona wartościami wymienionymi w pytaniu.
( 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
Daje następujący wynik:b03, d01, d02 .
To rozwiązanie jest elastyczne, ponieważ możesz zmienić każdy z LIMIT 1 deklaracje do LIMIT N gdzie N to dowolna liczba. W ten sposób możesz na przykład uzyskać poprzednie 3 rzędy i kolejne 6 rzędów.