IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Compter le nombre de dossiers, pas le nombre d'enregistrements


Sujet :

PHP & Base de données

  1. #1
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    Donne nous la structure de ta table ca nous eclairera
    Mais il existe ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(nomdetacolonne) AS nomquetuveux FROM tatable;
    Enfin, je vois pas trop ce que tu veux ..

  3. #3
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    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.

  4. #4
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

  5. #5
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Citation Envoyé par JWhite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  6. #6
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    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)

  7. #7
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  8. #8
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    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)

  9. #9
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    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.

  10. #10
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    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)

  11. #11
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 31/01/2008, 08h50
  2. [SQL Server] nombre de dossier à une étape donnée
    Par mister3957 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 17/09/2006, 11h35
  3. [PL/SQL] Compter le nombre de tuples impactés ?
    Par clawhammer dans le forum Oracle
    Réponses: 4
    Dernier message: 12/05/2006, 19h48
  4. [SQL] Compter un pas de 5 en 5
    Par Décibel dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/03/2006, 11h29
  5. [SQL]Compter le nombre de colonne
    Par dumser1 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2006, 09h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo