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

非常感谢您的任何建议。此外,如果有任何术语可以帮助我通过谷歌搜索进行进一步的研究,那也是最受欢迎的。

编辑添加:在上面的示例中,包含关联的表是 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:

上面的查询由两部分组成:

内部部分:

(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

你快到了,你只需要添加以下内容:

select 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 回答