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

記事にタグを付けることができるのは 1 回だけであることはわかっています。さて、私が欲しいクエリは次のようなものです:

HAS ACTIVE ARTICLES の各タグに記事 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 に答える