Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL pobiera ROW_NUMBER i COUNT na każde żądanie SELECT

Prawdopodobnie ma to na celu umożliwienie stronicowania. Pokazanie całkowitej liczby wierszy może być naprawdę drogie.

Jednym ze sposobów, który sprawdził się w przypadku różnych baz danych, jest podzielenie pracy na dwie części. Najpierw zbierasz identyfikatory odpowiednich wierszy w tabeli tymczasowej. Po drugie, wysyłasz zapytanie do pełnego zestawu danych. Dane zebrane w pierwszej części pozwalają w łatwy sposób obliczyć całkowitą liczbę wierszy i identyfikatory wierszy na danej stronie.

Oto przybliżony przykład dla SQL Server. Zauważ, że przykład nie opiera się na funkcjach okna, takich jak row_number() , które nie są dostępne w 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 

Przy okazji, jeśli to możliwe, oddałbym ten wymóg projektantom, aby dokładnie sprawdzili, czy warto poświęcić temu dużo czasu. Jest o wiele prostsze, jeśli nie musisz wyświetlać całkowitej liczby wierszy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie PHP do wykonywania wielu zapytań MYSQL

  2. MYSQL automatycznie wstawia pliki csv z folderu za pomocą mysqlimport

  3. ciągłe przewijanie. AJAX, PHP, JAVASCRIPT, MYSQL

  4. jak ustawić stałą domyślną strefę czasową na serwerze mysql?

  5. Strona logowania Visual Basic powodująca błąd (klauzula Error BC30506 Handles wymaga WithEvents....)