Ceci est probablement destiné à permettre la pagination. Afficher le nombre total de lignes peut être très coûteux.
Une façon que j'ai trouvée de bien fonctionner sur une variété de bases de données est de diviser le travail en deux parties. Tout d'abord, vous collectez l'ID des lignes pertinentes dans une table temporaire. Deuxièmement, vous interrogez l'ensemble de données complet. Les données collectées dans la première partie vous permettent de calculer facilement le nombre total de lignes et les ID des lignes sur une certaine page.
Voici un exemple approximatif pour SQL Server. Notez que l'exemple ne repose pas sur les fonctions de fenêtre comme row_number()
, qui ne sont pas disponibles dans 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
Soit dit en passant, si possible, je renverrais cette exigence aux concepteurs pour qu'ils vérifient si cela vaut la peine d'y consacrer beaucoup de temps. C'est beaucoup plus simple si vous n'avez pas besoin d'afficher le nombre total de lignes.