1

MYSQL データベースに異なるテーブルがあり、行を選択する前に特定の値をチェックする SELECT クエリを作成する必要があります。

基本的に 3 つのテーブル (news、tags、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 = 3status = 0. は、表のcountどこで有効になるべきではありません。news_id = 3news_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 に答える