Problème d'INNER JOIN avec MySQL

Statut
N'est pas ouverte pour d'autres réponses.
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.
 
1er
OP
P

PunkDeLuxe

condom
ozilrit a dit:
Non-testé. =]
Le COUNT(*) part en sucette. Et j'obtiens un 1 pour un article ne disposant pas de commentaire(s).
 
1er
OP
P

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
 
1er
OP
P

PunkDeLuxe

condom
ozilrit a dit:
Quel est le problème ?


Peut-être ?
Un gros merci :)

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

suis une vraie clinche une fois que le SQL est en mode avancé :/
 

ozilrit

Elite
Allons jusque la St Valentin : qu'espères-tu recevoir de "c.id AS idcommentaire" ?
 
1er
OP
P

PunkDeLuxe

condom
ozilrit a dit:
Allons jusque la St Valentin : qu'espères-tu recevoir de "c.id AS idcommentaire" ?
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.
 

ozilrit

Elite
Oui mais à quelle fin comptes-tu utiliser idcommentaire ?
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut