Ето още един начин да го направите с помощта на UNION
с. Мисля, че това е малко по-лесно за разбиране и по-гъвкаво от приетия отговор. Обърнете внимание, че примерът приема id
полето е уникално, което изглежда е така въз основа на вашия въпрос.
SQL заявката по-долу предполага, че вашата таблица се нарича demo
и има един единствен уникален id
поле и таблицата е попълнена със стойностите, които сте посочили във вашия въпрос.
( 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
Той произвежда следния резултат:b03, d01, d02
.
Това решение е гъвкаво, защото можете да промените всяко от LIMIT 1
оператори до LIMIT N
където N
е произволно число. По този начин можете да получите например предишните 3 реда и следващите 6 реда.