Как выбрать «предыдущие» и «следующие» записи в SQL? - PullRequest
4 голосов
/ 10 мая 2010

Я создаю на своем сайте страницу с подробностями поста в блоге, на которой будет отображаться ссылка « предыдущий » и « следующий », аналогичная тому, как работает запись в блоге на машинке. Смотрите пример ниже. alt text

Мне интересно, есть ли способ запросить базу данных, которая выполняет что-то вроде изображения ниже, где она выбирает «текущую» запись (желтым цветом) для отображения, но также выбирает следующую и предыдущие записи (зеленым цветом), когда отсортировано по дате публикации.

alt text

Также, для пояснения, таблица базы данных, с которой я работаю, имеет уникальные даты публикации. Извините, что пример изображения показывает несколько записей с одной и той же PublishDate.

Ответы [ 3 ]

11 голосов
/ 10 мая 2010

Вы не делаете. У SQL нет предыдущего, следующего понятия. Вы в основном запрашиваете следующую топ-1 в упорядоченном запросе (например, по дате) после того, который у вас уже есть. Это означает, что вам нужно иметь / навязывать заказ (по заказу по выписке) для фильтрации.

4 голосов
/ 10 мая 2010

Вам нужны средства заказа постов. Если у вас есть это, то вы можете сделать что-то вроде следующего в SQL Server 2005+, где вы передаете желаемый номер элемента:

With OrderedPosts As
    (
    Select ...
        , ROW_NUMBER() OVER ( ORDER BY PublishDate ) As ItemRank
    From ..
    Where ...
    )
Select
From OrderedPosts
Where ItemRank = @ItemNumber

В коде сайта вам нужно будет отследить, на каком номере вы сейчас находитесь, а затем вычесть один и запрос, чтобы получить предыдущий, или добавить один и запрос, чтобы получить следующий.

Если вы хотите, чтобы следующее и предыдущее вместе с текущим в одном запросе, вы могли бы сделать что-то вроде:

With OrderedPosts As
    (
    Select ...
        , ROW_NUMBER() OVER ( ORDER BY PublishDate ) As ItemRank
    From ..
    Where ...
    )
Select
From OrderedPosts
Where ItemRank Between (@ItemNumber - 1) And (@ItemNumber + 1)
0 голосов
/ 12 августа 2014

См. Следующую статью в Microsoft Tech Net

http://social.technet.microsoft.com/wiki/contents/articles/23811.paging-a-query-with-sql-server.aspx

Надеюсь, что эта помощь

...