Dette er sandsynligvis beregnet til at tillade paginering. Det kan være rigtig dyrt at vise det samlede antal rækker.
En måde, som jeg har fundet ud af at fungere godt på en række forskellige databaser, er at opdele arbejdet i to dele. Først samler du ID'et for de relevante rækker i en midlertidig tabel. For det andet forespørger du det fulde datasæt. De data, der er indsamlet i den første del, giver dig en nem måde at beregne det samlede antal rækker og id'erne for rækker på en bestemt side.
Her er et groft eksempel for SQL Server. Bemærk, at eksemplet ikke er afhængig af vinduesfunktioner som row_number()
, som ikke er tilgængelige i 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
Forresten, hvis det er muligt, ville jeg returnere dette krav til designerne for at dobbelttjekke, om det er værd at bruge meget tid på. Det er meget nemmere, hvis du ikke behøver at vise det samlede antal rækker.