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

#sql #sql-server

#sql #sql-сервер

Вопрос:

Предположим, у меня есть таблица, упорядоченная по столбцу Name. В первый раз я хотел бы выбрать 500 лучших строк. Пользователь может добавлять новые строки в таблицу. В зависимости от требований пользователя. Я бы хотел получить следующие 500 строк, не извлекая первые 500 строк снова. Предположим, что таблица упорядочена по имени, и он добавил новые строки, которые могут быть в топ-500.

Вопрос в том, как я могу выбрать следующие 500 строк, включая новые строки, которые я не смог получить в первый раз, потому что это новые строки?

Комментарии:

1. Какая версия SQL Server? В более поздних версиях есть больше возможностей для этого.

Ответ №1:

То, что вы описываете, называется подкачкой

Вот хорошая статья, которая описывает это. Подкачка страниц на стороне сервера с использованием SQL Server 2005

Который включает в себя этот пример

 DECLARE @PageSize INT,
    @PageNumber INT,
    @FirstRow INT,
    @LastRow INT

SELECT  @PageSize = 20,
    @PageNumber = 3

SELECT  @FirstRow = ( @PageNumber - 1) * @PageSize   1,
    @LastRow = (@PageNumber - 1) * @PageSize   @PageSize ;

WITH Members  AS
(
    SELECT  M_NAME, M_POSTS, M_LASTPOSTDATE, M_LASTHEREDATE, M_DATE, M_COUNTRY,
            ROW_NUMBER() OVER (ORDER BY M_POSTS DESC) AS RowNumber,
            ROW_NUMBER() OVER (ORDER BY M_NAME DESC) AS RowNumber2
    FROM    dbo.FORUM_MEMBERS
)
SELECT  RowNumber, M_NAME, M_POSTS, M_LASTPOSTDATE, M_LASTHEREDATE, M_DATE, M_COUNTRY
FROM    Members
WHERE   RowNumber BETWEEN @FirstRow AND @LastRow
ORDER BY RowNumber ASC;
  

Обратите внимание на переменные pagesize и pagenumber . Вместо этого это могут быть параметры хранимой процедуры.

Ответ №2:

Я полагаю, что у вас есть столбец в таблице users с именем isnewuser, для которого установлено значение true для каждого нового добавленного пользователя, и он не отображается в списке

пока вы просматриваете следующие 500 записей, в то время как были добавлены некоторые другие пользователи, я бы посоветовал вам показать их в отдельном списке под исходным с надписью «новые пользователи» и т. Д. И т. Д..

Нет смысла показывать недавно добавленных пользователей , которые могли бы быть на первой странице , на странице 2 основного списка .