SQL : update avec JOIN + Count() [Résolu/Fermé]

Signaler
Messages postés
4984
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
31 octobre 2019
-
le hollandais volant
Messages postés
4984
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
31 octobre 2019
-
Bonjour, j'ai une BDD SQL avec deux tables : articles et commentaires.
La table article contient un champ "id" unique et un champ "nb_comments" qui doit contenir le nombre de commentaires associés à lui.

La table commentaire contient un champ "article_id", où chaque commentaire est ainsi lié à une article.

Ce que je veux, en une seule requête :
- balayer tous les articles
- compte le nombre de commentaires pour chaque article
- remplir le champ "nb_com" avec le nombre de commentaires trouvés.


J'ai déjà ça :
SELECT a.id, a.nb_comments, count(a.id) AS nbr 
FROM articles a INNER JOIN commentaires c
ON (c.article_id = a.bt_id) GROUP BY a.bt_id


Qui me compte pour chaque article "id" le nombre de commentaires associés. Mais comment enregistrer le nombre de commentaires dans chaque champ 'nb_comments" d'un article ?

J'ai tenté ça :

UPDATE articles SET nb_comments = (SELECT count(a.id) FROM articles a INNER JOIN commentaires c ON (c.article_id = a.id) GROUP BY a.id ) 


Mais ça ne marche pas : tous les articles se voient associer au nombre de commentaires du premier article de la base, ce qui ne va pas.

Si je met un WHERE id = 42 à la fin :
UPDATE articles SET bt_nb_comments = (SELECT count(a.bt_id) FROM articles a INNER JOIN commentaires c ON (c.bt_article_id = a.bt_id) GROUP BY a.bt_id ) WHERE id = 42


alors seule l'article 42 se vera atribuer le nombre de commentaires du premier article.

Si je met un WHERE a.id=42 dans le SELECT :
UPDATE articles SET bt_nb_comments = (SELECT count(a.bt_id) FROM articles a INNER JOIN commentaires c ON (c.bt_article_id = a.bt_id) WHERE a.id=42 GROUP BY a.bt_id )


alors tous les articles se voient attribuer le nombre de commentaires de l'article 42.

Une solution pour que chaque article ait son nombre de commentaires associés ?
Je bosse en PHP.



1 réponse

Messages postés
4984
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
31 octobre 2019
964
Finalement j'ai trouvé un code qui marche :

UPDATE articles SET nb_comments = (SELECT count(a.id) FROM articles a INNER JOIN commentaires c ON (c.article_id = a.id) WHERE articles.id = a.id GROUP BY a.id)


Notez que le join se fait après le ON sur :
c.article_id = a.id

Et que le where se fait sur ça :
articles.id = a.id

article.id et a.id ne sont pas identiques : le premier est créé par le UPDATE et le second par le SELECT.
Là était la subtilité.

Ce code fonctionne avec SQLite.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 87587 internautes nous ont dit merci ce mois-ci

le hollandais volant
Messages postés
4984
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
31 octobre 2019
964
Et pour MySQL :

UPDATE articles SET nb_comments = (SELECT count(articles.id) FROM commentaires WHERE commentaires.article_id = articles.id)