#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 основного списка .