2011-06-17 3 views
-1

J'ai 3 tables News, News_tag et Tag, News_tag beaucoup à beaucoup de relation entre les nouvelles et Tag. Je veux que la requête sql obtienne toutes les balises avec le nombre de nouvelles correspondant. S'il vous plaît aider.Joindre de plusieurs à plusieurs tables

+0

Je veux maintenant avec un tag combien de nouvelles associées. –

+0

Nerses S'il vous plaît ne pas oublier d'accepter les réponses qui vous aide! –

Répondre

5
SELECT COUNT(*) as news_count, t.* 
FROM Tag t 
    LEFT OUTER JOIN News_Tag nt 
     ON t.id = nt.tag_id 
GROUP BY t.id 

Ne pas oublier la jointure externe pour avoir l'étiquette avec 0 nouvelles.

1

Sans connaître les structures des tables, il est difficile de donner une réponse. Vous voulez probablement quelque chose comme ça?

select news.subject, tag.subject 
from news, news_tag, tag 
where news.id = news_tag.news 
and news_tag.tag = tag.id 
order by tag.subject 

Essayez d'améliorer votre taux d'acceptation.

+2

-1, la jointure implicite est mauvaise! –

+0

@ Scorpi0: Pour moi, downvoting jointures implicites semble plus mal que les jointures eux-mêmes. Eh bien, trop dur, de toute façon, puisque la solution fonctionne **. –

+0

de travail! = Bon ... –

0

En supposant qu'il ya une colonne nommée tag dans les deux Tag et News_tag, et que vous cherchez le nombre de News articles pour chaque Tag:

SELECT Tag.tag, COUNT(*) 
FROM Tag 
INNER JOIN News_tag ON News_tag.tag = Tag.Tag 
GROUP BY Tag.tag 
2

J'ai besoin de connaître les coloumns pour vous dire exactement syntaxe cependant, il ressemblera à quelque chose comme;

SELECT TagName, COUNT(*) 
FROM Tag t 
INNER JOIN NEws_tag tn 
    ON t.TagID = tn.TagID 
INNER JOIN News n 
    ON n.NewsID = tn.NewsID 
GROUP BY TagName 

Regardez ici pour deatails de la syntaxe http://dev.mysql.com/doc/refman/5.0/en/join.html

+0

Je pense que vous vouliez dire n.NewsID = tn.NewsID –

1
SELECT COUNT(*) 
FROM news AS n 
LEFT JOIN (news_tag AS nt, tag AS t) 
ON ( 
    nt.tag_id = t.tag_id 
    AND 
    nt.news_id = n.id 
) 
WHERE (
    t.tag 
    IN (
     '$tag' 
    ) 
) 
+0

'Je veux que la requête sql obtienne toutes les balises avec le compte de nouvelles correspondant' vous avez le nombre, mais pas les balises de nouvelles. – Johan

+0

Sa réponse a été difficile pour moi de lire, je l'ai lu comme il veut le nombre de nouvelles données une étiquette. Je le réécrirais mais la réponse de Scorpi0 est déjà géniale. –