Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL получава ROW_NUMBER и COUNT при всяка SELECT заявка

Това вероятно има за цел да позволи пагиниране. Показването на общия брой редове може да бъде наистина скъпо.

Един начин, който открих за добра работа с различни бази данни, е да разделя работата на две части. Първо събирате идентификатора на съответните редове във временна таблица. Второ, правите заявка за пълния набор от данни. Данните, събрани в първата част, ви дават лесен начин да изчислите общия брой редове и идентификаторите на редове на определена страница.

Ето един груб пример за SQL Server. Имайте предвид, че примерът не разчита на прозоречни функции като row_number() , които не са налични в MySQL.

create table #id_list (rn int identity, pk int);

insert   #id_list
         (pk)
select   customer_id
from     customers
where    name like '%Joe%';

select   (select  count(*) from #id_list) as total_rows
,        rn -- The row's number
,        name
,        birth_date
,        ... -- Other columns
from     #id_list id
join     customer c
on       c.pk = c.customer_id
where    rn between 15 and 29; -- Second 15-row page 

Между другото, ако е осъществимо, бих върнал това изискване на дизайнерите, за да проверят отново дали си струва да отделите много време. Много по-лесно е, ако не е необходимо да показвате общия брой редове.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. По-добър PHP, MySql, HTML и JavaScript IDE

  2. Не може да се използва обект от тип PDOStatement като масив

  3. Какви са разликите между SQL и MySQL

  4. Как да направя MySQL count(*) в Doctrine2?

  5. Защо заключването на ниво таблица е по-добро от заключването на ниво ред за големи таблици?