[MySQL] Combiner un select classique et un count()

Combiner un select classique et un count() [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 04-12-2017 à 07:37:16    

Bonjour,
 
Quelqu'un saurait s'il est possible de combiner un SELECT classique et un count() dans la même requete ?
 
Par exemple
 
SELECT count(colonne1), colonne1 FROM table ...
 
ce qui nous donnerait la liste des rows de la colonne1 ainsi que le nombre de lignes retournées.
 
Merci.


---------------
"Première fois de ma vie que je te vois mais tu m'as l'air d'un sacré tocard !"
Reply

Marsh Posté le 04-12-2017 à 07:37:16   

Reply

Marsh Posté le 04-12-2017 à 13:42:15    

Code :
  1. SELECT (SELECT COUNT(colonne1) FROM TABLE), colonne1 FROM TABLE


?
 
Mais quel langage ?
 
Parce que via l'API tu peux récupérer le nombre de lignes renvoyées par la requête (exemple en PHP : mysqli_num_rows, PDOStatement::rowCount - officieusement, etc)
 
(bien que les deux ne soient pas équivalents : COUNT(colonne1) ne compte pas les lignes où colonne1 IS NULL)

Message cité 1 fois
Message édité par pluj le 04-12-2017 à 13:44:53
Reply

Marsh Posté le 04-12-2017 à 14:56:39    

pluj a écrit :

Code :
  1. SELECT (SELECT COUNT(colonne1) FROM TABLE), colonne1 FROM TABLE


?
 
Mais quel langage ?
 
Parce que via l'API tu peux récupérer le nombre de lignes renvoyées par la requête (exemple en PHP : mysqli_num_rows, PDOStatement::rowCount - officieusement, etc)
 
(bien que les deux ne soient pas équivalents : COUNT(colonne1) ne compte pas les lignes où colonne1 IS NULL)


 
J'ai pas precisé en PHP, mais j'avais utilisé le "mysqli_num_rows" mais vu que je fais un LIMIT dans ma query ça ne me donne pas le resultat escompté, et ça m'oblige a faire une 2nd requete pour avoir le nombre de ligne total.


---------------
"Première fois de ma vie que je te vois mais tu m'as l'air d'un sacré tocard !"
Reply

Marsh Posté le 04-12-2017 à 15:27:18    

Quand on a toutes les données, ça change tout : dans ce cas tu peux utiliser la fonctionnalité SQL_CALC_FOUND_ROWS et la fonction FOUND_ROWS().
 
Tu fais toujours 2 "requêtes" mais la seconde n'est qu'un appel de la fonction FOUND_ROWS pour lequel MySQL t'auras gardé le résultat du SQL_CALC_FOUND_ROWS (une espèce de COUNT interne ignorant la clause LIMIT) au chaud.
 
Pour résumer :

  • une première requête en : SELECT SQL_CALC_FOUND_ROWS colonne1 FROM table ... LIMIT ... (c'est juste un mot clé en plus qui suit SELECT en somme par rapport à ton SELECT de base/origine)
  • une deuxième pour invoquer FOUND_ROWS : SELECT FOUND_ROWS() (à exécuter puis en faire un fetch pour récupérer ce nombre bien sûr)


Pour les détails, voir la doc de MySQL.
 
(si tu n'arrives pas à l'intégrer, repasses avec ton code ;))

Message cité 1 fois
Message édité par pluj le 04-12-2017 à 17:37:28
Reply

Marsh Posté le 05-12-2017 à 17:45:06    

pluj a écrit :

Quand on a toutes les données, ça change tout : dans ce cas tu peux utiliser la fonctionnalité SQL_CALC_FOUND_ROWS et la fonction FOUND_ROWS().
 
Tu fais toujours 2 "requêtes" mais la seconde n'est qu'un appel de la fonction FOUND_ROWS pour lequel MySQL t'auras gardé le résultat du SQL_CALC_FOUND_ROWS (une espèce de COUNT interne ignorant la clause LIMIT) au chaud.
 
Pour résumer :

  • une première requête en : SELECT SQL_CALC_FOUND_ROWS colonne1 FROM table ... LIMIT ... (c'est juste un mot clé en plus qui suit SELECT en somme par rapport à ton SELECT de base/origine)
  • une deuxième pour invoquer FOUND_ROWS : SELECT FOUND_ROWS() (à exécuter puis en faire un fetch pour récupérer ce nombre bien sûr)


Pour les détails, voir la doc de MySQL.
 
(si tu n'arrives pas à l'intégrer, repasses avec ton code ;))


 
Merci, ça devrait le faire  :jap:
 
edit: ça à marché impec   [:athome]


Message édité par vandit le 05-12-2017 à 18:15:18

---------------
"Première fois de ma vie que je te vois mais tu m'as l'air d'un sacré tocard !"
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed