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.