Получение соседних записей

Valar

Новичок
Получение соседних записей

Добрый день. Пытался решить возникшую проблему несколькими способами, в том числе через конструкцию BETWEEN, но так и не получилось достичь желаемого результата.

Есть таблица, состоящая из трех полей: id, caption (заголовок), position (поле для сортировки, значения - integer, по возрастанию)

Вот пример данных таблицы:
(position | caption)


Нужно, зная ID, получить две соседние записи.
Например:
Определен Заголовок-3 (ID=3), возвращаются: Заголовок-2, Заголовок4;
Определен Заголовок-1 (ID=1), возвращаются: Заголовок-2, Заголовок-5 (!)

При этом, стоит учитывать, что значения полей ID и Position необязательно должны идти подряд в виде обычной прогрессии.
------------------------

Подскажите решение :)
 

zerkms

TDD infected
Команда форума
WHERE `id` > 3 ORDER BY `id`, LIMIT 1
UNION
WHERE `id` < 3 ORDER BY `id` DESC, LIMIT 1
 

Valar

Новичок
Спасибо за отзыв!

К сожалению, такое решение не подходит, т.к. если $id == первой записи, то должна возвращаться последняя. Думаю разбить этот запрос на две части, и в случае, если один из них пустой, взять значения "с противоположного края"
Спасибо, что помогли :)
 

Wicked

Новичок
((WHERE `id` > 3 ORDER BY `id` LIMIT 1
UNION
ORDER BY `id` LIMIT 1) LIMIT 1)
UNION
((WHERE `id` < 3 ORDER BY `id` DESC LIMIT 1
UNION
ORDER BY `id` DESC LIMIT 1) LIMIT 1)
как-то так
 
Сверху