loading..
Русский    English
03:51
листать

Постраничная разбивка записей (пейджинг) стр. 2

Чтобы посчитать число страниц, воспользуемся следующим простым алгоритмом:

  • если число строк запроса нацело делится на число записей на странице, то результат целочисленного деления одного на другое дает число страниц;
  • если существует ненулевой остаток целочисленного деления числа строк запроса на число записей на странице, то к результату целочисленного деления добавляем единицу (последняя страница неполная).

Это алгоритм реализуется стандартными средствами с помощью оператора CASE:

Консоль
Выполнить
  1. SELECT *,
  2.       CASE WHEN total % 2 = 0 THEN total/2 ELSE total/2 + 1 END AS num_of_pages
  3. FROM (
  4.       SELECT *, COUNT(*) OVER() AS total
  5.       FROM Laptop
  6.       ) X;


Чтобы получить для каждой строки запроса номер страницы, на которую она должна попасть, мы можем применить аналогичный алгоритм, только применить его нужно не к общему числу строк (total), а к номеру строки. Этот номер строки мы сможем получить с помощью ранжирующей функции ROW_NUMBER, выполнив требуемую по условию сортировку по цене:

Консоль
Выполнить
  1. SELECT *,
  2.       CASE WHEN num % 2 = 0 THEN num/2 ELSE num/2 + 1 END AS page_num,
  3.       CASE WHEN total % 2 = 0 THEN total/2 ELSE total/2 + 1 END AS num_of_pages
  4. FROM (
  5.       SELECT *, ROW_NUMBER() OVER(ORDER BY price DESC) AS num,
  6.              COUNT(*) OVER() AS total
  7.       FROM Laptop
  8. ) X;

code model speed ram hd price screen num total page_num num_of_pages
3 1750 754     128    12     1200,00     14     1     6     1     3
5 1752     750     128    10     1150,00     14     2     6     1     3
4 1298     600     64      10     1050,00     15     3     6     2     3
2     1321     500     64      8     970,00     12     4     6     2     3
6     1298     450     64      10     950,00     12     5     6     3     3
1     1298     350     32      4     700,00     11     6     6     3     3


Bookmark and Share
Страницы: 1 2 3 4
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INFORMATION_SCHEMA INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker Больше тэгов
Учебник обновлялся
месяц назад
продать газпромбанк
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100