Ето още един начин да го направите с помощта на 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 реда.