我在试图找出这个问题时遇到了麻烦。我有这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
我会事先确定我正在搜索的文章是否有效。
答案 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。
我猜你已经知道那里的4
是article 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`