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 :

[MySQL] Compter sur deux tables [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Par défaut [MySQL] Compter sur deux tables
    Bonjour, j'ai plusieurs soucis pour compter, trier et ranger...
    J'ai donc deux tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    table1                   table2
     
    id1 code1 categorie    id2 code2 groupe
     1   001        a       1   001       1
     2   002        b       2   002       1
     3   003        c       3   003       1
     4   004        d       4   004       2
     5   005        e       5   005       2
     6   006        b       6   006       2
     7   007        a       7   007       3
     8   008        a       8   008       3
     9   009        c       9   009       3
    je voudrais arriver à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    groupe categorie  nombre
       1       a         1
       2       a         0
       3       a         2

    ce qui lie mes tables c'est le code

    alors pour cette requete, je veux :
    compter le nombre de 'categorie' dans chaque 'groupe'
    grouper par 'groupe'
    trier par l'id2'

    et surtout afficher les zéro, des 'groupe'
    n'ayant meme pas de 'categorie'
    je veux savoir combien il y a de
    categorie dans le groupe et s'il n'y en a pas afficher "0"

    voici ce que j'ai fais pour l'instant

    SELECT table2.groupe,
    COUNT(table1.categorie) AS nombre
    FROM table2, table1
    WHERE table1.code=table2.code2 AND categorie = 'a'
    GROUP BY table2.groupe
    ORDER BY table2.id2 ASC
    si vous pouviez me donner un coup de main
    et s'il manque quelque chose, demandé moi

    les CREATE TABLE

    CREATE TABLE IF NOT EXISTS `table1` (
    `id1` int(11) NOT NULL auto_increment,
    `nom` text NOT NULL,
    `prenom` text NOT NULL,
    `categorie` text NOT NULL,
    `code1` text NOT NULL,
    PRIMARY KEY (`id1`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
    CREATE TABLE IF NOT EXISTS `table2` (
    `id2` int(11) NOT NULL auto_increment,
    `groupe` text NOT NULL,
    `code2` text NOT NULL,
    PRIMARY KEY (`id2`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
    et les INSERT INTO

    INSERT INTO `table1` (`id1`,`nom`, `prenom`, `categorie`, `code1`) VALUES
    (1, 'durant', 'andre', 'a', '001',),
    (2, 'dupont', 'Jean', 'b', '002'),
    (3, 'martin', 'Elodie', 'c', '003'),
    (4, 'blanc', 'Dominique', 'd', '004'),
    (5, 'rouge', 'Monique', 'e', '005'),
    (6, 'vert', 'Francois', 'b', '006'),
    (7, 'bleu', 'Fabien', 'a', '007'),
    (8, 'noir', 'Jean', 'a', '008'),
    (9, 'blanc', 'Marie', 'c', '009'),
    INSERT INTO `table2` (`id2`, `groupe`, `code2`) VALUES
    (1, '1', '001'),
    (2, '1', '002'),
    (3, '1', '003'),
    (4, '2', '004'),
    (5, '2', '005'),
    (6, '2', '006'),
    (7, '3', '007'),
    (8, '3', '008'),
    (9, '3', '009'),

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour, je te conseille ca :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT t2.groupe, t1.categorie, count( t1.categorie ) AS nombre
    FROM table1 t1
    INNER JOIN table2 t2 ON t1.code1 = t2.code2
    GROUP BY t2.groupe, t1.categorie

    ->

    groupe categorie nombre
    1 a 1
    1 b 1
    1 c 1
    2 b 1
    2 d 1
    2 e 1
    3 a 2
    3 c 1

    Reste ensuite dans ton php (mysq_fetch_array) de tester si ta valeur a est présente pour ton groupe 2. Si non : alors elle vaut 0

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Par défaut
    merci pour ta réponse, mais cette requete me ressort
    le nombre de chaque catégorie par groupe

    et toujours sans afficher les categorie null

    j'ai ajouter pour voir un WHERE grades = 'CD'

    alors le résultat me convient, mais il faudrait
    afficher tous les groupe dans une permière colonne
    puis une deuxième colonne avec la categorie choisie
    et meme si dans un groupe cette categorie
    n'existe pas, il faut afficher la ligne tel que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    groupe   categorie   nombre
       2         a        0

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Citation Envoyé par Madfrix Voir le message

    groupe categorie nombre
    1 a 1
    1 b 1
    1 c 1
    2 b 1
    2 d 1
    2 e 1
    3 a 2
    3 c 1
    Avec cette requete te donnant ces resultats, il est facile via quelques lignes php d'exploiter ton rowSet et de voir que pour le groupe 1 il n'y a pas de catégories d et e (ie: mettre toutes tes catégories possibles dans un tableau est de tester si l'ensemble de tes catégories trouvées par groupe est égal au nombre d'entrées de ton tableau php).

    Ceci dit je consens qu'il doit y avoir une manière directe de le faire en SQL, peut etre en créant une table référencant tes catégories et de jointer dessus en LEFT JOIN, à creuser...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Par défaut
    merci de tes réponses, mais voici la réponse à ma question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT groupe, (SELECT COUNT(categorie) FROM table1 WHERE categorie='a' AND id1=id2) AS cat
    FROM table2 t2
    GROUP BY groupe

  6. #6
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Attention, ca me semble bancal cette requete, tu "jointes" sur les id de tes 2 tables qui pour moi ce sont pas jointables. D'ailleurs tu avais dis :

    ce qui lie mes tables c'est le code
    et le problème reste entier : tu n'as toujours pas les catégories non présentes par groupe.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Par défaut
    en fait je joins bien les code1 et code2

    et bien si pourtant je vois bien les groupe
    qui non pas de categorie !

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

Discussions similaires

  1. requete sur deux tables mysql
    Par kaking dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 28/11/2008, 09h38
  2. Requete mysql : select sur deux tables
    Par IP-Fix dans le forum Requêtes
    Réponses: 9
    Dernier message: 12/11/2008, 16h03
  3. Insérer sur deux tables selon clé Mysql
    Par Ralfman68 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 15/12/2006, 12h19
  4. Réponses: 14
    Dernier message: 04/12/2006, 11h22
  5. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53

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