0

我在试图弄清楚这一点时遇到了麻烦。我有这 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    

我会确保我正在搜索的文章事先处于活动状态。

4

2 回答 2

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

在这里拉小提琴。

我想你已经知道4里面有article N:)

于 2013-10-31T04:43:58.087 回答
-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`
于 2013-10-31T02:06:15.070 回答