复杂的MYSQL选择

时间:2012-10-13 03:25:18

标签: mysql sql select

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

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

  1. 新闻包含有关新闻的信息。
  2. 标记有关标签的信息。
  3. news_tags存储新闻使用的标签。
  4. 这是我的3个不同的表格(当然简化)

    举例说明:

    新闻:

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

    标签:

    tag_id | tag_name
    1      | name 1 
    2      | name 2
    

    news_tags:

    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 = 0count不应在news_id = 3表中的news_tags生效。

    基本上所需的输出应为

    tag_name | count
    name 1   | 2 
    name 2   | 1
    

    感谢您的帮助。

1 个答案:

答案 0 :(得分: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