Requête avec LIMIT et nombre de résultats
Le
Dominique Ottello
Bonjour,
Une requête MySQL sur des tables MyISAM me donne 117 résultats.
Je voudrait ajouter une limite du nombre de résultats retournés tout en
connaissant le nombre total.
Si je fais :
SELECT A.a_nom, A.a_prenom, A.a_promo
FROM avia_vilg_apprentis AS A
WHERE A.a_nom REGEXP '.*RT.*'
ORDER BY A.a_nom, A.a_prenom LIMIT 20
J'ai bien les 20 premiers résultats
Si je fais :
SELECT A.a_nom, A.a_prenom, A.a_promo, COUNT(*)
FROM avia_vilg_apprentis AS A
WHERE A.a_nom REGEXP '.*RT.*'
ORDER BY A.a_nom, A.a_prenom LIMIT 20
Count me donne bien 117, mais je n'ai qu'une seule ligne en résultat.
Comment combiner COUNT(*) et LIMIT 20 pour n'obtenir que les 20 premiers
ET le nombre total ?
D'abord, est-ce possible avec une seule requête ?
Merci.
--
Un ordinateur résout des problèmes que nous n'aurions pas sans lui
Technique aéronautique : http://aviatechno.free.fr
Concorde dans la presse de 1965 à 2003 : http://le.pointu.free.fr
Une requête MySQL sur des tables MyISAM me donne 117 résultats.
Je voudrait ajouter une limite du nombre de résultats retournés tout en
connaissant le nombre total.
Si je fais :
SELECT A.a_nom, A.a_prenom, A.a_promo
FROM avia_vilg_apprentis AS A
WHERE A.a_nom REGEXP '.*RT.*'
ORDER BY A.a_nom, A.a_prenom LIMIT 20
J'ai bien les 20 premiers résultats
Si je fais :
SELECT A.a_nom, A.a_prenom, A.a_promo, COUNT(*)
FROM avia_vilg_apprentis AS A
WHERE A.a_nom REGEXP '.*RT.*'
ORDER BY A.a_nom, A.a_prenom LIMIT 20
Count me donne bien 117, mais je n'ai qu'une seule ligne en résultat.
Comment combiner COUNT(*) et LIMIT 20 pour n'obtenir que les 20 premiers
ET le nombre total ?
D'abord, est-ce possible avec une seule requête ?
Merci.
--
Un ordinateur résout des problèmes que nous n'aurions pas sans lui
Technique aéronautique : http://aviatechno.free.fr
Concorde dans la presse de 1965 à 2003 : http://le.pointu.free.fr

Poser une question


Bonjour,
Je ne sais pas le faire avec une seule requête mais, en tout cas
avec MySQL, on peut utiliser SQL_CALC_FOUND_ROWS :
SELECT SQL_CALC_FOUND_ROWS A.a_nom, A.a_prenom, A.a_promo
FROM avia_vilg_apprentis AS A
WHERE A.a_nom REGEXP '.*RT.*'
ORDER BY A.a_nom, A.a_prenom LIMIT 20
puis :
SELECT FOUND_ROWS();
Dominique Ottello a écrit :
C'est le comportement voulu de count.
Tu cherches à ajouter le total à chaque lignes, c'est bien ça ?
Dans ce cas, on peut faire de cette façon :
select a, (select count(*) from matable)
from matable limit 20;
Il y a peut-être d'autres solutions...
J'ai une autre question : pourquoi pas 2 requêtes ?
--
Xavier Nayrac
Parce que je voudrais savoir, dès la première requête, s'il va falloir
réitérer pour, éventuellement, demander l'affichage de la suite des
résultats.
--
Un ordinateur résout des problèmes que nous n'aurions pas sans lui
Technique aéronautique : http://aviatechno.free.fr
Concorde dans la presse de 1965 à 2003 : http://le.pointu.free.fr
Deux solutions :
- si vous voulez en afficher n et savoir si il y en a au moins un de
plus à afficher (page suivante), demandez en un de plus. Si vous en
recevez n ou moins, pas de page suivante, si vous en recevez n+1, il y
a au moins une page suivante
- utiliser un curseur http://en.wikipedia.org/wiki/Cursor_(databases)
Merci, mais ça me donne le nombre total de lignes dans la table, pas le
nombre total de résultats de la requête.
Ce que je « voudrais », c'est, avec la première requête, connaître le
nombre total de résultats, même si j'en limite le nombre restitué par
LIMIT X.