Isso provavelmente serve para permitir a paginação. Mostrar o número total de linhas pode ser muito caro.
Uma maneira que descobri funcionar bem em uma variedade de bancos de dados é dividir o trabalho em duas partes. Primeiro, você coleta o ID das linhas relevantes em uma tabela temporária. Segundo, você consulta o conjunto de dados completo. Os dados coletados na primeira parte oferecem uma maneira fácil de calcular o número total de linhas e os IDs das linhas em uma determinada página.
Aqui está um exemplo aproximado para o SQL Server. Observe que o exemplo não depende de funções de janela como
row_number()
, que não estão disponíveis no 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
A propósito, se possível, eu devolveria esse requisito aos designers para verificar se vale a pena gastar muito tempo. É muito mais simples se você não precisar exibir o número total de linhas.