我有一个名为user_feedback的表用来存储用户反馈。
在这个表中,我有一个名为product_id的列,我在其中存储产品id IE-
f_id f_name product_id
1 x 5
2 y 1,3
3 z 1,5
4 A 2,3,4,7产品表是-
product_id pname
1 samsung
2 apple
3 micromax
4 vivo
5 sony
6 lenovo
7 xolo如何知道每个产品的产品数量
前-
prdname count
samsung 2
apple 1
micromax 2
vivo 1
sony 2
lenovo 0
xolo 1发布于 2017-03-27 17:55:47
如果您可以控制这些表的结构,我建议您实现一个适当的N:N关系,从feedback表中删除product_id,并创建一个仅包含product_id和f_id列的新表prod_fb_rel
在那张桌子上你会看到
f_id | product_id
1 | 5
2 | 1
2 | 3
3 | 1
3 | 5
4 | 2
4 | 3
4 | 4
4 | 7而您需要的查询就像下面这样简单
select prdname, count(*)
from product t1
join prod_fb_rel t2
on t1.product_id = t2.product_id
group by prdname编辑
要从您现在拥有的数据开始填充新表,您可能应该定义一个split函数(如this one ),然后编写一个过程,该过程接受每个现有记录,循环product_id中的id数量,并在每次迭代中使用split函数提取id并将其插入到新表中。
发布于 2017-03-27 17:57:34
类似这样的东西(如果你不能改变结构)(但要注意性能...):
CREATE TABLE T1 (F_ID INT, PRODUCT_LIST VARCHAR(20));
CREATE TABLE T2 (PRODUCT_ID INT, PNAME VARCHAR(20));
INSERT INTO T1 VALUES (1, '5');
INSERT INTO T1 VALUES (2, '1,3');
INSERT INTO T1 VALUES (3, '1,5');
INSERT INTO T1 VALUES (4, '2,3,4,7');
INSERT INTO T2 VALUES (1,'samsung');
INSERT INTO T2 VALUES (2,'apple');
INSERT INTO T2 VALUES (3,'micromax');
INSERT INTO T2 VALUES (4,'vivo');
INSERT INTO T2 VALUES (5,'sony');
INSERT INTO T2 VALUES (6,'lenovo');
SELECT PNAME, (SELECT COUNT(*) FROM T1 WHERE (CONCAT(',' , T1.PRODUCT_LIST,',' )) LIKE CONCAT('%,', CAST(T2.PRODUCT_ID as CHAR ) ,',%') ) AS RC
FROM T2;输出:
PNAME RC
1 samsung 2
2 apple 1
3 micromax 2
4 vivo 1
5 sony 2
6 lenovo 0发布于 2017-03-27 18:22:15
select pname, count(*)
from product t1
join user_feedback t2 on FIND_IN_SET(t1.product_id,t2.product_id)
group by pname;试试上面的code.Hope吧,这会有帮助的。
https://stackoverflow.com/questions/43043087
复制相似问题