Problème d'INNER JOIN avec MySQL

Discussion dans 'Web, design' créé par PunkDeLuxe, 27 Décembre 2007.

Statut de la discussion:
Fermée.
  1. Offline
    PunkDeLuxe condom
    J'ai un léger petit problème dans mon interrogation SQL. j'ai donc 3 tables : articles, membres et commentaires

    Mon but est "simple" je désire aller compter le nombre de commentaires pour chacuns des articles. Et aller rechercher le pseudo de l'auteur (car dans la table articles c'est son id qui est stockée).

    Voici mes tables :
    Code:
    CREATE TABLE articles (
      id INTEGER(11) NOT NULL,
      categorie INTEGER(11) NOT NULL,
      type INTEGER(11) NOT NULL,
      titre VARCHAR(120) NULL,
      date DATE NOT NULL DEFAULT 0000-00-00,
      auteur INTEGER(11) NOT NULL,
      chapeau TEXT NOT NULL,
      texte TEXT NOT NULL,
      conclusion TEXT NOT NULL,
      PRIMARY KEY(id)
    );
    
    CREATE TABLE commentaires (
      id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      idArt INTEGER UNSIGNED NULL,
      idAuteur INTEGER UNSIGNED NULL,
      texte TEXT NULL,
      PRIMARY KEY(id)
    );
    
    CREATE TABLE membres (
      id INTEGER(11) NOT NULL,
      pseudo VARCHAR(35) NOT NULL,
      nom VARCHAR(35) NOT NULL,
      prenom VARCHAR(35) NOT NULL,
      mail VARCHAR(50) NOT NULL,
      age DATE NOT NULL DEFAULT 0000-00-00,
      localisation VARCHAR(50) NOT NULL,
      password TEXT NOT NULL,
      PRIMARY KEY(id)
    );
    
    Et voici ma requète actuelle :
    Code:
    SELECT *,
    COUNT(*) AS nbReactions
    FROM articles AS a 
    INNER JOIN membres AS m ON m.id = a.auteur
    INNER JOIN commentaires AS c ON a.id = c.idArt 
    WHERE a.categorie = '1'
    GROUP BY c.idArt
    Cette requète sélectionne bien ce que je lui demande, mais uniquement lorsque un commentaire pour l'article existe dans la table. Ce qui est un peu génant car c'est la requète que je compte utiliser pour afficher les dernières actualités dans ce projet.

    Merci (avec de l'avance) pour toutes les personnes qui m'aideront.
    PunkDeLuxe, 27 Décembre 2007
    #1
  2. Offline
    ozilrit Touriste
    Non-testé. =]
    ozilrit, 27 Décembre 2007
    #2
  3. Offline
    PunkDeLuxe condom
    Le COUNT(*) part en sucette. Et j'obtiens un 1 pour un article ne disposant pas de commentaire(s).
    PunkDeLuxe, 27 Décembre 2007
    #3
  4. Offline
    ozilrit Touriste
    ?
    ozilrit, 27 Décembre 2007
    #4
  5. Offline
    PunkDeLuxe condom
    :love:

    Tu me sauves de l'utilisation d'une requète avec un jolit UNION. Viens ici que je t'embrasse :D
    PunkDeLuxe, 27 Décembre 2007
    #5
  6. Offline
    ozilrit Touriste
    Joyeux Noël ! =]
    ozilrit, 27 Décembre 2007
    #6
  7. Offline
    PunkDeLuxe condom
    Ha bah ça veut pas fonctionner correctement. Ca me compte bien les entrées. Mais ça ne m'affiche pas forcément la news.

    Voici la base de donnée exportée afin de comprendre ce bug car j'ai du mal à l'expliquer :
    Code:
    CREATE TABLE `articles` (
      `id` int(11) NOT NULL auto_increment,
      `categorie` int(11) NOT NULL default '0',
      `type` int(11) NOT NULL default '0',
      `titre` varchar(120) NOT NULL default '',
      `date` date NOT NULL default '0000-00-00',
      `auteur` int(11) NOT NULL default '0',
      `chapeau` text NOT NULL,
      `texte` text NOT NULL,
      `conclusion` text NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
    
    -- 
    -- Contenu de la table `articles`
    -- 
    
    INSERT INTO `articles` VALUES (1, 1, 1, 'Lancement du site PWB', '2007-12-27', 1, 'Mauris pellentesque. Vivamus imperdiet orci sed nulla. Maecenas nisl tortor, cursus non, consectetuer nonummy, laoreet ultricies, nunc. Mauris ullamcorper nisi vel risus. Ut gravida. ', 'Mauris pellentesque. Vivamus imperdiet orci sed nulla. Maecenas nisl tortor, cursus non, consectetuer nonummy, laoreet ultricies, nunc. Mauris ullamcorper nisi vel risus. Ut gravida. Curabitur scelerisque, nunc et iaculis elementum, sem odio consequat metus, vel placerat turpis risus vel mauris. Mauris turpis. Suspendisse erat. Fusce sit amet leo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis mattis ligula eleifend quam. Nam vitae diam ac diam laoreet ullamcorper. Duis fermentum tellus mollis mi. In sem pede, lobortis et, commodo vel, pharetra posuere, pede.\r\n\r\nMauris pellentesque. Vivamus imperdiet orci sed nulla. Maecenas nisl tortor, cursus non, consectetuer nonummy, laoreet ultricies, nunc. Mauris ullamcorper nisi vel risus. Ut gravida. Curabitur scelerisque, nunc et iaculis elementum, sem odio consequat metus, vel placerat turpis risus vel mauris. Mauris turpis. Suspendisse erat. Fusce sit amet leo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis mattis ligula eleifend quam. Nam vitae diam ac diam laoreet ullamcorper. Duis fermentum tellus mollis mi. In sem pede, lobortis et, commodo vel, pharetra posuere, pede.\r\n\r\nMauris pellentesque. Vivamus imperdiet orci sed nulla. Maecenas nisl tortor, cursus non, consectetuer nonummy, laoreet ultricies, nunc. Mauris ullamcorper nisi vel risus. Ut gravida. Curabitur scelerisque, nunc et iaculis elementum, sem odio consequat metus, vel placerat turpis risus vel mauris. Mauris turpis. Suspendisse erat. Fusce sit amet leo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis mattis ligula eleifend quam. Nam vitae diam ac diam laoreet ullamcorper. Duis fermentum tellus mollis mi. In sem pede, lobortis et, commodo vel, pharetra posuere, pede.', 'Mauris pellentesque. Vivamus imperdiet orci sed nulla. Maecenas nisl tortor, cursus non, consectetuer nonummy, laoreet ultricies, nunc. Mauris ullamcorper nisi vel risus. Ut gravida. Curabitur scelerisque, nunc et iaculis elementum, sem odio consequat metus, vel placerat turpis risus vel mauris. Mauris turpis. Suspendisse erat. ');
    INSERT INTO `articles` VALUES (2, 1, 1, 'Record d''audience', '2007-12-27', 1, 'Fusce sit amet leo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis mattis ligula eleifend quam. Nam vitae diam ac diam laoreet ullamcorper. Duis fermentum tellus mollis mi. In sem pede, lobortis et, commodo vel, pharetra posuere, pede.', 'Mauris pellentesque. Vivamus imperdiet orci sed nulla. Maecenas nisl tortor, cursus non, consectetuer nonummy, laoreet ultricies, nunc. Mauris ullamcorper nisi vel risus. Ut gravida. Curabitur scelerisque, nunc et iaculis elementum, sem odio consequat metus, vel placerat turpis risus vel mauris. Mauris turpis. Suspendisse erat. Fusce sit amet leo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis mattis ligula eleifend quam. Nam vitae diam ac diam laoreet ullamcorper. Duis fermentum tellus mollis mi. In sem pede, lobortis et, commodo vel, pharetra posuere, pede.\r\nMauris pellentesque. Vivamus imperdiet orci sed nulla. Maecenas nisl tortor, cursus non, consectetuer nonummy, laoreet ultricies, nunc. Mauris ullamcorper nisi vel risus. Ut gravida. Curabitur scelerisque, nunc et iaculis elementum, sem odio consequat metus, vel placerat turpis risus vel mauris. Mauris turpis. Suspendisse erat. Fusce sit amet leo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis mattis ligula eleifend quam. Nam vitae diam ac diam laoreet ullamcorper. Duis fermentum tellus mollis mi. In sem pede, lobortis et, commodo vel, pharetra posuere, pede.', 'Duis mattis ligula eleifend quam. Nam vitae diam ac diam laoreet ullamcorper. Duis fermentum tellus mollis mi. In sem pede, lobortis et, commodo vel, pharetra posuere, pede.');
    INSERT INTO `articles` VALUES (3, 1, 1, 'Kikou la praline', '2007-12-27', 1, 'Mauris pellentesque. Vivamus imperdiet orci sed nulla. Maecenas nisl tortor, cursus non, consectetuer nonummy, laoreet ultricies, nunc. Mauris ullamcorper nisi vel risus.  ', 'Mauris pellentesque. Vivamus imperdiet orci sed nulla. Maecenas nisl tortor, cursus non, consectetuer nonummy, laoreet ultricies, nunc. Mauris ullamcorper nisi vel risus. Ut gravida. Curabitur scelerisque, nunc et iaculis elementum, sem odio consequat metus, vel placerat turpis risus vel mauris. Mauris turpis. Suspendisse erat. Fusce sit amet leo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis mattis ligula eleifend quam. Nam vitae diam ac diam laoreet ullamcorper. Duis fermentum tellus mollis mi. In sem pede, lobortis et, commodo vel, pharetra posuere, pede.', 'Mauris pellentesque. Vivamus imperdiet orci sed nulla. Maecenas nisl tortor, cursus non, consectetuer nonummy, laoreet ultricies, nunc. ');
    INSERT INTO `articles` VALUES (4, 1, 1, 'Kikoulol', '2007-12-27', 1, 'Vestibulum rutrum pretium nibh. Donec mi. Nulla egestas laoreet sapien. Aliquam nulla libero, laoreet vitae, eleifend gravida, mattis non, tortor. Pellentesque metus lectus, laoreet quis, venenatis non, sodales vel, tortor. Ut nec sem. ', 'Vestibulum rutrum pretium nibh. Donec mi. Nulla egestas laoreet sapien. Aliquam nulla libero, laoreet vitae, eleifend gravida, mattis non, tortor. Pellentesque metus lectus, laoreet quis, venenatis non, sodales vel, tortor. Ut nec sem. Suspendisse auctor lacus ultricies risus facilisis scelerisque. Etiam ultrices. Nam malesuada nonummy turpis. Quisque quis quam ut velit consequat fringilla. Morbi eget pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam metus. Aliquam erat volutpat.\r\n\r\nVestibulum rutrum pretium nibh. Donec mi. Nulla egestas laoreet sapien. Aliquam nulla libero, laoreet vitae, eleifend gravida, mattis non, tortor. Pellentesque metus lectus, laoreet quis, venenatis non, sodales vel, tortor. Ut nec sem. Suspendisse auctor lacus ultricies risus facilisis scelerisque. Etiam ultrices. Nam malesuada nonummy turpis. Quisque quis quam ut velit consequat fringilla. Morbi eget pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam metus. Aliquam erat volutpat.\r\n\r\nVestibulum rutrum pretium nibh. Donec mi. Nulla egestas laoreet sapien. Aliquam nulla libero, laoreet vitae, eleifend gravida, mattis non, tortor. Pellentesque metus lectus, laoreet quis, venenatis non, sodales vel, tortor. Ut nec sem. Suspendisse auctor lacus ultricies risus facilisis scelerisque. Etiam ultrices. Nam malesuada nonummy turpis. Quisque quis quam ut velit consequat fringilla. Morbi eget pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam metus. Aliquam erat volutpat.', 'Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam metus. Aliquam erat volutpat.');
    
    -- --------------------------------------------------------
    
    -- 
    -- Structure de la table `commentaires`
    -- 
    
    CREATE TABLE `commentaires` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `idArt` int(10) unsigned default NULL,
      `idAuteur` int(10) unsigned default NULL,
      `texte` text,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
    
    -- 
    -- Contenu de la table `commentaires`
    -- 
    
    INSERT INTO `commentaires` VALUES (1, 1, 1, 'eddede');
    
    -- --------------------------------------------------------
    
    -- 
    -- Structure de la table `membres`
    -- 
    
    CREATE TABLE `membres` (
      `id` int(11) NOT NULL auto_increment,
      `pseudo` varchar(35) NOT NULL default '',
      `nom` varchar(35) NOT NULL default '',
      `prenom` varchar(35) NOT NULL default '',
      `mail` varchar(50) NOT NULL default '',
      `age` date NOT NULL default '0000-00-00',
      `localisation` varchar(50) NOT NULL default '',
      `password` text NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
    
    -- 
    -- Contenu de la table `membres`
    -- 
    
    INSERT INTO `membres` VALUES (1, 'Alex', '', '', 'alex@gamelike.net', '0000-00-00', '', '493b8c9fec3e5883cf95261a784132d4');
    INSERT INTO `membres` VALUES (2, 'alks', '', '', 'alks@gamelike.net', '0000-00-00', '', '493b8c9fec3e5883cf95261a784132d4');
            
    Et ma requète :
    Code:
    SELECT a.id, a.titre, a.chapeau, c.id AS idcommentaire, m.pseudo,
                            COUNT(c.id) AS nbReactions
                            FROM articles AS a 
                            INNER JOIN membres AS m ON m.id = a.auteur
                            LEFT JOIN commentaires AS c ON a.id = c.idArt 
                            WHERE a.categorie = '1'
                            GROUP BY c.idArt
                            ORDER BY a.id DESC
                            LIMIT 10
    PunkDeLuxe, 27 Décembre 2007
    #7
  8. Offline
    ozilrit Touriste
    Quel est le problème ?

    Peut-être ?
    ozilrit, 27 Décembre 2007
    #8
  9. Offline
    PunkDeLuxe condom
    Un gros merci :)

    Bonne année cette fois-ci ?! :D

    suis une vraie clinche une fois que le SQL est en mode avancé :/
    PunkDeLuxe, 27 Décembre 2007
    #9
  10. Offline
    ozilrit Touriste
    Allons jusque la St Valentin : qu'espères-tu recevoir de "c.id AS idcommentaire" ?
    ozilrit, 27 Décembre 2007
    #10
  11. Offline
    PunkDeLuxe condom
    Si je ne fais pas ça, vu que j'ai fait la connerie de nommer mes champs id de la mm manière sur ces 2 tables. Lorsque que je fais ma requète et que je l'affiche, et que je désire utiliser l'ID de l'article, il m'affiche l'ID du commentaire. Car il utilise le dernier champ portant ce nom.
    PunkDeLuxe, 28 Décembre 2007
    #11
  12. Offline
    ozilrit Touriste
    Oui mais à quelle fin comptes-tu utiliser idcommentaire ?
    ozilrit, 28 Décembre 2007
    #12
Statut de la discussion:
Fermée.