Вот еще один способ сделать это, используя UNION
s. Я думаю, что это немного легче понять и более гибко, чем принятый ответ. Обратите внимание, что в примере предполагается, что поле 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 строк, например.