Jointure tout bête

thedeejay Messages postés 74 Date d'inscription dimanche 2 avril 2006 Statut Membre Dernière intervention 23 juin 2010 - 23 juin 2010 à 21:32
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 24 juin 2010 à 00:32
Salut!

Je suis un gros noob dans les jointures, et j'aimerais avoir de votre aide pour un problème qui parait tout bête je pense:

J'ai une table articles, qui contient (incroyablement) mes articles, et une table commentaires (je pense que vous avez deviné).

Ce qui serait cool, ca serait en une requête de sélectionner un ou plusieurs articles (selon la page lire ou liste des articles) et le nombre de commentaires associés...

Voici l'actuelle:

SELECT * FROM articles ORDER BY id DESC LIMIT 0,5

A optimiser, mais je fais la base d'abord...

A mon avis ca doit être quelque chose comme JOIN count(commentaires WHERE id = ????)

Mais impossible de finir ca...

Merci de votre aide!

1 réponse

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
24 juin 2010 à 00:32
Salut,

Ha, voici une question qu'elle est intéressante :)

Pour commencer je te conseille de revoir la syntaxe de JOIN. Maintenant, supposons que tes tables soient les suivantes :
mysql> DESCRIBE articles;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| nom   | varchar(42) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> DESCRIBE commentaires;
+------------+---------+------+-----+---------+----------------+
| Field      | Type    | Null | Key | Default | Extra          |
+------------+---------+------+-----+---------+----------------+
| id         | int(11) | NO   | PRI | NULL    | auto_increment |
| id_article | int(11) | NO   |     | NULL    |                |
+------------+---------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> 


Il te faut alors faire une jointure externe associée à un GROUP BY afin d'obtenir ce que tu cherches (sans oublier le COUNT bien entendu) :
mysql> SELECT articles.id, articles.nom, COUNT(commentaires.id) AS 'nb_commentaires' FROM articles LEFT OUTER JOIN commentaires ON articles.id = commentaires.id_article GROUP BY articles.id;
+----+------+-----------------+
| id | nom  | nb_commentaires |
+----+------+-----------------+
|  1 | plop |               0 |
|  2 | plip |               6 |
+----+------+-----------------+
2 rows in set (0.01 sec)

mysql> 

À toi de jouer, il ne te reste plus qu'a adapter ^^
0
Rejoignez-nous