一篇文章出现在每个标签中的次数是多少?

时间:2013-10-31 01:15:46

标签: mysql many-to-many

我在试图找出这个问题时遇到了麻烦。我有这3个表:标签列表,文章列表,关系列表。

他们如下:

代码

 id | name
-----------
 1  | tag1
 2  | tag2
 3  | tag3
 4  | noArticles

文章

 id | title    | active
------------------------
 1  | product1 | 1
 2  | product2 | 1
 3  | product3 | 0
 4  | product4 | 1
 5  | product5 | 0
 6  | product6 | 1

关系

 article_id | tag_id
---------------------
     1      |   1
     1      |   3
     2      |   3
     3      |   1
     3      |   2
     4      |   2
     4      |   3
     5      |   2
     6      |   1
     6      |   2
     6      |   1

我知道一篇文章只能有一个标签。好吧,我想要的查询是这样的:

在有活动文章的每个标签中出现多少次N(假设... 4)?

答案如下:

 name | times 
--------------
 tag1 |  0    
 tag2 |  1    
 tag3 |  1    

我会事先确定我正在搜索的文章是否有效。

2 个答案:

答案 0 :(得分:1)

在对您的问题进行编辑后,现在可以清楚地了解您要找的内容:

SELECT t.name, SUM(r.article_id = 4) times FROM tags t
LEFT JOIN relations r ON r.tag_id = t.id
JOIN articles a ON r.article_id = a.id
WHERE a.active = 1
GROUP BY t.id

小提琴here

我猜你已经知道那里的4article N:)

答案 1 :(得分:-1)

试过这句话,它对我来说很好:

SELECT  
    `Tags`.`name`,
    `Articles`.`active`,
    COUNT(`Relations`.`Tags_id`) AS `count`
    FROM     `Relations`,`Articles`,`Tags`

    WHERE   
             `Articles`.`id`  =  `Relations`.`article_id`  
        AND  `Tags`.`id`  =  `Relations`.`tag_id`  

    GROUP BY `Relations`.`article_id`