Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2007, 15h22   #1
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Par défaut [SQL] Compter le nombre de dossiers, pas le nombre d'enregistrements

Bonjour,

Lors de l'exécution d'une requête, il est possible de récupérer le nombre d'enregistrements retournés en faisant par exemple :

Code :
$nbLignes = count($requete);
Dans un cas, je ne souhaite pas récupérer le nombre d'enregistrements, mais le nombre de dossier différents.

J'ai alors fait en PHP une boucle qui lit le résultat de ma requête et en rupture sur le n° de dossier, je fait + 1 dans un compteur.

Existe-t-il une fonction sql qui permette de faire cela directement dans une requête ?

exemple de requete :

Code :
1
2
3
4
5
6
7
SELECT maj_etat_civil.id_maj, id_user,maj_num_dos,maj_civilite_id, maj_nom, maj_prenom, maj_prenom_usage, maj_commentaire,maj_etat_civil.id_trt
			FROM ".$prefixe_table."t_users_dossiers
			LEFT OUTER JOIN ".$prefixe_table."`maj_etat_civil` 
			ON ".$prefixe_table."t_users_dossiers.id_maj=".$prefixe_table."maj_etat_civil.id_maj 
			WHERE '".$today."' BETWEEN (gest_date_debut AND gest_date_fin)
			AND t_users_dossiers.id_trt BETWEEN 1 AND 4
			AND maj_etat_civil.id_trt BETWEEN 1 AND 4
Ceci est un exemple de requête sur lequel, je peux avoir en résultat 3 fois le même "maj_num_dos". Donc je voudrais compter 1 et non 3 enregistrements
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 15h56   #2
Membre éclairé
 
Avatar de piff62
 
Inscription : décembre 2003
Messages : 431
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : décembre 2003
Messages : 431
Points : 362
Points : 362
Donne nous la structure de ta table ca nous eclairera
Mais il existe ca :
Code :
SELECT count(nomdetacolonne) AS nomquetuveux FROM tatable;
Enfin, je vois pas trop ce que tu veux ..
piff62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 16h18   #3
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Je veux compter le nombre de dossiers, sachant que pour 1 dossier, j'ai "n" utilisateurs.

Or si je récupère "$nbLignes = count($requete);", je vais avoir le nombre d'ulisateurs et non le nombre de dossiers.

Bien sûr je veux l'affichage de tous les utilisateurs.

J'avais déjà testé le COUNT (*) FROM nnnn, mais il veut un group by ce qui fait que j'ai un regroupement par dossier.

Si j'ai 13 utilisateurs pour 6 dossiers, je veux avoir 13 enregistrements et un compteur qui me dise que j'ai 6 dossiers.

J'espère avoir été plus clair.
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 16h50   #4
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Code :
SELECT DISTINCT(numero_dossier) FROM table
Un count par-dessus ça et ça doit s'approcher du but...
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 17h03   #5
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Citation:
Envoyé par JWhite
Code :
SELECT DISTINCT(numero_dossier) FROM table
Un count par-dessus ça et ça doit s'approcher du but...
Je ne suis pas sûr de comprendre; Pour moi DISTINCT ne va me prendre qu'un enregistrement par numero_dossier, où alors c'est que je n'ai pas compris son utilisation.

Je vais prendre un exemple simple :

J'ai un fichier "personnel" avec des hommes et des femmes, le champ les différenciant est "sexe"; sexe peut prendre les valeurs "M" ou "F".

Je veux afficher l'ensemble des membres du personnel et récupérer 2 compteurs.

Un compteur du nombre de "H" et un compteur du nombre de "F".
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 17h08   #6
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Bah il faudrait faire un COUNT avec un GROUP BY sexe mais ça correspond pas à ce qut demandes avec tes dossiers...

Avec le DISTINCT que j'ai mis tu récupères la liste des numéros de dossiers distincts, donc la liste de tes dossiers différentes, avec un count là-dessus tu as le nombre de dossiers différents en base, c'est bien ce que tu veux nan ?
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 17h55   #7
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Oui c'est ce que je veux, mais est-ce que je garde la totalité de mes enregistrements ?

Est-ce que je peux faire quelque chose du genre

Code :
SELECT toto, titi, tata, COUNT(if (distinct(numero_dossier),1,0)) as compteur FROM nnnn
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 18h56   #8
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Euh nan je pense pas...

Mais tu sais tu peux faire deux requêtes (c'est même nécessaire je pense) ça va pas tout faire exploser hein

Une requête pour connaître le nombre de dossiers puis une seconde pour connaître les enregistrements. Ou alors tu gères le nombre de dossiers côté PHP mais c'est s'embêter pour rien vu qu'une requête le ferait très bien
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 19h04   #9
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Citation:
Envoyé par JWhite
Euh nan je pense pas...

Mais tu sais tu peux faire deux requêtes (c'est même nécessaire je pense) ça va pas tout faire exploser hein

Une requête pour connaître le nombre de dossiers puis une seconde pour connaître les enregistrements. Ou alors tu gères le nombre de dossiers côté PHP mais c'est s'embêter pour rien vu qu'une requête le ferait très bien
C'est ce que j'étais en train de tester justement, et je me pose la question suivante :

Le plus rapide ou le moins gourmand c'est la requête sql ou la boucle php ?
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 19h29   #10
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Citation:
Envoyé par lodan
C'est ce que j'étais en train de tester justement, et je me pose la question suivante :

Le plus rapide ou le moins gourmand c'est la requête sql ou la boucle php ?
Perso je prendrais la requête vu que ta connexion est déjà ouverte, une requête et hop direct le résultat, avec la boucle ça fait au moins un test par tour donc bon... Mais franchement tu devrais pas voir grand chose comme différence
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 19h42   #11
Membre extrêmement actif
 
Avatar de lodan
 
Inscription : juin 2006
Messages : 1 804
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 1 804
Points : 587
Points : 587
Citation:
Envoyé par JWhite
Perso je prendrais la requête vu que ta connexion est déjà ouverte, une requête et hop direct le résultat, avec la boucle ça fait au moins un test par tour donc bon... Mais franchement tu devrais pas voir grand chose comme différence
J'ai adopté la requête et merci encore.
__________________
Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.
lodan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h58.


 
 
 
 
Partenaires

Hébergement Web