首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何统计mysql表中一个字段可以包含1个以上的值的个数

如何统计mysql表中一个字段可以包含1个以上的值的个数
EN

Stack Overflow用户
提问于 2017-03-27 17:47:14
回答 4查看 76关注 0票数 1

我有一个名为user_feedback的表用来存储用户反馈。

在这个表中,我有一个名为product_id的列,我在其中存储产品id IE-

代码语言:javascript
复制
     f_id  f_name      product_id
       1      x          5
       2      y          1,3
       3      z          1,5
       4      A          2,3,4,7

产品表是-

代码语言:javascript
复制
 product_id   pname
      1      samsung
      2      apple
      3      micromax
      4      vivo
      5      sony
      6      lenovo
      7      xolo

如何知道每个产品的产品数量

前-

代码语言:javascript
复制
        prdname       count
        samsung       2
        apple         1
        micromax      2
        vivo          1
        sony          2
        lenovo        0
        xolo          1
EN

回答 4

Stack Overflow用户

发布于 2017-03-27 17:55:47

如果您可以控制这些表的结构,我建议您实现一个适当的N:N关系,从feedback表中删除product_id,并创建一个仅包含product_idf_id列的新表prod_fb_rel

在那张桌子上你会看到

代码语言:javascript
复制
f_id  | product_id
   1  |          5
   2  |          1
   2  |          3
   3  |          1
   3  |          5
   4  |          2
   4  |          3
   4  |          4
   4  |          7

而您需要的查询就像下面这样简单

代码语言:javascript
复制
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并将其插入到新表中。

票数 1
EN

Stack Overflow用户

发布于 2017-03-27 17:57:34

类似这样的东西(如果你不能改变结构)(但要注意性能...):

代码语言:javascript
复制
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;

输出:

代码语言:javascript
复制
    PNAME   RC
1   samsung 2
2   apple   1
3   micromax    2
4   vivo    1
5   sony    2
6   lenovo  0
票数 0
EN

Stack Overflow用户

发布于 2017-03-27 18:22:15

代码语言:javascript
复制
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吧,这会有帮助的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43043087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档