compter les occurences dans une autre table

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : compter les occurences dans une autre table

par zeus » 15 juin 2009, 16:15

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

par Invité » 15 juin 2009, 15:33

merci bcp, c parfait

Re: compter les occurences dans une autre table

par Calimero » 15 juin 2009, 14:47

Bonjour,

Bravo pour avoir pu régler par toi-même ton premier souci. On part donc de ça :

Code : Tout sélectionner

SELECT ao.*, COUNT(ac.id) AS nbCodesDispo FROM operations AS ao, codes AS ac WHERE ac.idOperation = ao.id GROUP BY ao.id
On peut réécrire pour plus de lisibilité comme ceci :

Code : Tout sélectionner

SELECT ao.*, COUNT(ac.id) AS nbCodesDispo FROM operations ao JOIN codes ac ON ac.idOperation = ao.id GROUP BY ao.id
Et à partir de là, le left join vient tout seul :

Code : Tout sélectionner

SELECT ao.*, COUNT(ac.id) AS nbCodesDispo FROM operations ao LEFT JOIN codes ac ON ac.idOperation = ao.id GROUP BY ao.id
Et voilà le travail :wink:

par Invité » 15 juin 2009, 13:20

J'ai trouvé: c'est le GROUP BY ac.id qu n'est pas bon. Il pointe dur la table codes, au lieu de pointer sur la table operations.
Il faut faire un GROUP BY ao.id, et ça marche.

J'ai maintenant une liste d'opérations, et pour chaque opération, le nombre de codes est affiché dans les résultats.

Le hic: s'il n'y a pas de codes pour l'opération, l'opération concernée n'est pas affichée!
Comment faire pour afficher l'opération même s'il n'y a pas de codes correspondant?

Je sais qu'un LEFT JOIN sur la table codes permettrait de faire ça, mais je ne sais pas comment placer le COUNT, pour compter le nombre de codes pour chaque opération.

Merci pour un petit coup de main.

compter les occurences dans une autre table

par Invité » 15 juin 2009, 13:13

Bonjour à tous,

J'ai une table qui contient un liste d'OPERATIONS, et une autre table qui contient des CODES.
Pour chaque opération, il y a plusieurs codes.
Chaque enregistrement CODES contient un champ idOperation qui reprend l'id de l'opération concernée, afin de faire la liaison.

Voici les tables:

Code : Tout sélectionner

CREATE TABLE `operations` ( `id` int(10) NOT NULL auto_increment, `nom` varchar(255) NOT NULL, `nomFichier` varchar(255) NOT NULL, `dateCrea` datetime NOT NULL, `dateExpi` datetime NOT NULL, `published` tinyint(1) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM; CREATE TABLE `codes` ( `id` int(10) NOT NULL auto_increment, `code` varchar(255) NOT NULL, `nbDwldAuto` int(10) NOT NULL, `nbDwldRea` int(10) NOT NULL, `idOperation` int(10) NOT NULL, `published` tinyint(1) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM;
Je peux lister toutes les opérations en faisant ceci:

Code : Tout sélectionner

SELECT * FROM operations
Ma question: comment faire pour ajouter aux résultats, le nombre de codes pour chaque opération?
J'ai tenté ceci:

Code : Tout sélectionner

SELECT ao.*, COUNT(ac.id) AS nbCodesDispo FROM operations AS ao, codes AS ac WHERE ac.idOperation = ao.id GROUP BY ac.id
Pas d'erreur, mais les résultats ne sont pas bons. J'ai une multitude de lignes pour les opérations, au lieu de quelques unes.

Voyez vous comment je devrais construire la requête?

Merci pour vos réponses.