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.