Я работаю над решением быстрых ссылок для большого набора записей. Записи заказываются пользователем (критерии здесь не важны), и я составил список идентификаторов. Теперь мне удалось добавить позицию к каждому идентификатору.
SELECT
cp.id,
cp.page_name,
@rownum := @rownum + 1 AS `position`
FROM couch_pages cp
JOIN (SELECT @rownum := 0) r
WHERE cp.template_id = '2'
ORDER BY cp.publish_date DESC
Таблица couch_pages
имеет id
, template_id
, page_name
, publish_date
и множество других столбцов. Клиент может запросить произвольный порядок идентификаторов. Я должен следовать за лидерством и пересчитывать позицию каждый раз.
Чего я не знаю, так это того, можно ли рассчитать не только позицию для всего набора, но и получить позицию произвольного идентификатора, например, cp.id = '1600'
, и получать записи prev-next-last-first в один запрос.
Результат запроса выше выглядит просто -
"id" "page_name" "position"
"1578" "late-in-the-evening" "1"
"1600" "thats-why-god-made-" "2"
"1599" "god-bless-the-absen" "3"
............................
"124601" "loves-me-like-a-ro" "122703"
В данный момент я отправляю весь результат в массив PHP и могу найти соответствующую запись (например, с id = "1600") и ее соседей - предыдущая запись (id = "1578"), следующая запись , первая и последняя записи.
Я бы хотел , а не отправить целое подмножество клиенту, потому что я предполагаю, что количество записей может взорваться, и сценарий станет намного медленнее.
Можно ли отфильтровать требуемые (предыдущая, следующая, последняя, первая) записи для данного идентификатора из результатов?