1

我的 MYSQL 数据库中有不同的表,我需要创建一个 SELECT 查询,该查询将在选择一行之前检查某些值。

它基本上是 3 个表(新闻、标签和 news_tags)。

  1. news 包含有关新闻的信息。
  2. 标签 关于标签的信息。
  3. news_tags 存储新闻使用哪个标签。

这是我的 3 个不同的表(当然是简化的)

为了显示:

消息:

id | status
1  | 1
2  | 1
3  | 0

标签:

tag_id | tag_name
1      | name 1 
2      | name 2

新闻标签:

id | news_id | tag_id
1  | 1       | 1
2  | 1       | 2
3  | 2       | 1
4  | 3       | 1
5  | 3       | 2

现在,起初我想知道每个标签被使用了多少次。所以我想出了这个查询

SELECT tags.tag_name, news_tags.tag_id, COUNT(*) as count 
FROM news_tags 
LEFT JOIN tags 
ON tags.tag_id = news_tags.tag_id 
GROUP BY news_tags.tag_id 
ORDER BY count DESC

这给了我以下输出

tag_name | count
name 1   | 3 
name 2   | 2

现在我的问题是我不想计算那些news.status = 0; 因此,如果我们看一下我的示例,在news表格中,带有 的行id = 3具有status = 0. count不应该在news_id = 3表中的位置生效news_tags

基本上所需的输出应该是

tag_name | count
name 1   | 2 
name 2   | 1

感谢您的帮助。

4

1 回答 1

3

您需要将其与news表连接起来,以便查询status

SELECT tags.tag_name, news_tags.tag_id, COUNT(*) as count 
FROM    news_tags 
        LEFT JOIN tags 
            ON tags.tag_id = news_tags.tag_id 
        LEFT JOIN news
            ON news.id = news_tags.news_id
WHERE   news.status = 1
GROUP BY news_tags.tag_id 
ORDER BY count DESC
于 2012-10-13T03:28:53.883 回答