0

私が求めているものを説明するのは難しいかもしれません。質問があいまいな場合は申し訳ありません。

ID を使用して製品をキーワードに関連付けるテーブルがあります

したがって、製品 ID 2、3、4、5 がキーワード ID 14 に関連付けられ、製品 ID 3、6、9 がキーワード ID 15 に関連付けられている可能性があります。

私の質問は、キーワード 14 に関連付けられた ID とキーワード 15 などに関連付けられた ID (常に新しいキーワードが追加されます) の合計をカウントして保存するにはどうすればよいですか?

これまでの私のSQL:

select products_keyword_categories.key_cat_name 
from products_keyword_to_product 
inner join products_keyword_categories 
on products_keyword_categories.key_cat_id = products_keyword_to_product.key_cat_id 
group by products_keyword_categories.key_cat_name

アドバイスをいただきありがとうございます。また、Google 検索によるさらなる調査に役立つ用語があれば、それも大歓迎です。

編集して追加: 上の例では、関連付けを含むテーブルは products_keyword_to_product です。他のテーブルを内部結合して、キーワード名を返します。

編集して追加 (2): 申し訳ありませんが、質問があいまいになるのではないかと心配していました。キーワード ID 14 を使用してすべての製品をカウントしたい場合は、COUNT() AS を使用します - 回答で述べたように、キーワード ID 15 とキーワード ID 16 などを使用して製品の数をカウントする必要もあります。もっと理にかなっている。

4

4 に答える 4

3
select key_cat_name ,count(*) 
from products_keyword_categories pkc 
    inner join products_keyword_to_product ptk on pkc.id=ptk.key_id 
group by id;
于 2012-09-21T14:59:21.337 に答える
1
select cat.key_cat_name, count(*) from
products_keyword_categories cat inner join products_keyword_to_product prod
on prod.key_cat_id=cat.key_cat_id
group by cat.key_cat_name

編集:

select cat.key_cat_name, prod_assoc.product_id, count(*) from
products_keyword_categories cat inner join products_keyword_to_product prod_assoc
on prod_assoc.key_cat_id=cat.key_cat_id
group by cat.key_cat_name,prod_assoc.product_id

テーブル構造が次のようになっていると仮定します。

products_keyword_categories

key_cat_id key_cat_name

1          Electronics

2          Toys

3          Software

products_keyword_to_product

key_cat_id  product_id

1           1 

2           1

3           2

1           2

製品

product_id name

1          Product A

2          Robot 

編集2:

これを試して

SELECT key_cat_name, product_id, COUNT(*)
FROM
(select cat.key_cat_name, prod_assoc.product_id from
products_keyword_categories cat inner join products_keyword_to_product prod_assoc
on prod_assoc.key_cat_id=cat.key_cat_id) as tbl
GROUP BY key_cat_name, product_id

編集3:

上記のクエリは 2 つの部分で構成されています。

内側の部分:

(select cat.key_cat_name, prod_assoc.product_id from
products_keyword_categories cat inner join products_keyword_to_product prod_assoc
on prod_assoc.key_cat_id=cat.key_cat_id)

これにより、product_id と key_cat_name の組み合わせごとに 1 行が得られます。

外側の部分:

SELECT key_cat_name, product_id, COUNT(*)
FROM (...) as tbl
GROUP BY key_cat_name, product_id

これは、内側の部分 (tbl として) の結果に作用し、key_cat_name と product_id の組み合わせが内側の部分に出現する回数をカウントします。

これを確認してください:MySQLのサブクエリ、パート1

于 2012-09-21T13:36:36.353 に答える
0

あなたはもうすぐそこにいます、あなたはただ以下を追加する必要があります:

count(products_keyword_to_product.id)、products_keyword_categories.key_cat_nameを選択します...残りは正しいです

于 2012-09-21T12:58:52.557 に答える
0

更新された回答:

SELECT COUNT(*), reference_field FROM table WHERE...
HAVING field=value
GROUP BY field

集計条件については、使用する必要がありますHAVING

于 2012-09-21T12:59:53.267 に答える