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

  • Автор темы Автор темы Valar
  • Дата начала Дата начала

Valar

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

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

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

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


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

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

Подскажите решение :)
 
WHERE `id` > 3 ORDER BY `id`, LIMIT 1
UNION
WHERE `id` < 3 ORDER BY `id` DESC, LIMIT 1
 
Спасибо за отзыв!

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