Se connecter avec
S'enregistrer | Connectez-vous

[RESOLU] Count dans un INNER JOIN

Dernière réponse : dans Programmation

Bonjour,
Voilà dans ma requete permettant de selectionner les news, j'aimerais également qu'il aille compter les commentaires pour la news, qui se trouvent sur une autre table, liée grâce à "id_news".

Voici ce que j'ai essayé de faire

  1. SELECT news_commentaires.id_news, news_rubriques.rubrique_name, news_cont.id, news_cont.title, news_cont.message, news_cont.author, DATE_FORMAT( news_cont.date, "%d-%m-%y à %H:%i:%s" ) AS date
  2. FROM news_cont
  3. INNER JOIN news_rubriques ON news_cont.rubrique = news_rubriques.id
  4. INNER JOIN news_commentaires ON news_cont.id = count( news_commentaires.id_news )
  5. LIMIT 0 , 30

Autres pages sur : resolu count inner join

Lassé par la pub ? Créez un compte

Et que répond le serveur MySQL avec cette requete ?

Je verrais plutot quelque chose de ce genre :
  1. SELECT news_commentaires.id_news, news_rubriques.rubrique_name, news_cont.id, news_cont.title, news_cont.message, news_cont.author, DATE_FORMAT( news_cont.date, "%d-%m-%y à %H:%i:%s" ) AS date, COUNT( news_commentaires.id_news )
  2. FROM news_cont
  3. INNER JOIN news_rubriques ON news_cont.rubrique = news_rubriques.id
  4. INNER JOIN news_commentaires ON news_cont.id = news_commentaires.id_news
  5. LIMIT 0 , 30

mais sans conviction

Pour ma requete il me retourne
-> #1111 - Invalid use of group function

Pour la tienne
-> #1140 - Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

Merci pour cette réponse rapide :p 

Toujours sans conviction mais bon...
  1. SELECT news_commentaires.id_news, news_rubriques.rubrique_name, news_cont.id, news_cont.title, news_cont.message, news_cont.author, DATE_FORMAT( news_cont.date, "%d-%m-%y à %H:%i:%s" ) AS date, COUNT( news_commentaires.id_news )
  2. FROM news_cont
  3. INNER JOIN news_rubriques ON news_cont.rubrique = news_rubriques.id
  4. INNER JOIN news_commentaires ON news_cont.id = news_commentaires.id_news
  5. GROUP BY news_cont.id LIMIT 0 , 30

elle ne donne pas d'erreur mais je ne sais pas si le résultat sera celui désiré...

Enfaites
  1. SELECT news_rubriques.rubrique_name, news_cont.id, news_cont.title, news_cont.message, news_cont.author, DATE_FORMAT( news_cont.date, "%d-%m-%y à %H:%i:%s" ) AS date, COUNT( news_commentaires.id_news )
  2. FROM news_cont
  3. INNER JOIN news_rubriques ON news_cont.rubrique = news_rubriques.id
  4. INNER JOIN news_commentaires ON news_cont.id = news_commentaires.id_news
  5. GROUP BY news_cont.id
  6. LIMIT 0 , 30


Fonctionne, mais lorsqu'il y'a pas de commentaires, il retourne rien.

Peut etre en remplacant le INNER JOIN par un LEFT JOIN mais c'est encore une fois purement théorique du fait que je ne peux pas tester avant...
  1. SELECT news_rubriques.rubrique_name, news_cont.id, news_cont.title, news_cont.message, news_cont.author, DATE_FORMAT( news_cont.date, "%d-%m-%y à %H:%i:%s" ) AS date, COUNT( news_commentaires.id_news )
  2. FROM news_cont
  3. INNER JOIN news_rubriques ON news_cont.rubrique = news_rubriques.id
  4. LEFT JOIN news_commentaires ON news_cont.id = news_commentaires.id_news
  5. GROUP BY news_cont.id
  6. LIMIT 0 , 30
Lassé par la pub ? Créez un compte
Tom's guide dans le monde