如何将用逗号分隔的SQL列数据分隔为单个值,然后计算这些值

时间:2019-07-04 10:28:35

标签: php mysql sql database

Am在PHP中使用SQL命令计算插入到website defacement列中的值的数量。我想计算表的整个列中像attack_type这样的单个值的出现。但是这里的列SELECT attack_type, count(*) as number FROM data_input_test GROUP BY attack_type 包含不同的值,用逗号分隔,并且计数将整个列数据视为字符串。下面是我当前的SQL语句及其输出

我尝试用PHP爆炸print_r

/*rewrite your loop like this*/
  for (var i = 0; i < myPathItems.length; i++) {
    (function () {
      var index = i;
      myPathItems[index].filled = false;
      myPathItems[index].stroked = true;
      myPathItems[index].strokeWidth = 1;
      myPathItems[index].strokeColor = doc.swatches.getByName("Cutter").color;
    })();
  }

这是上面语句的输出 生成:

https://drive.google.com/open?id=1TyRL_Mh0OOJWaCpFczxmBr34No9LUpzH

但是我想要的是:

https://drive.google.com/open?id=1eeA_1TCER0WMpZwSkBDMzRtRa8xihbZd

,依此类推。编辑上面想要的输出以显示我确切想要的。

关于stackoverflow和其他论坛的其他答案都无关紧要,或者正在使用regrex或以另一种方式创建新表。我不想这样做,因为我的托管有一些限制。我的托管不提供触发器的创建,regrex或临时表的创建

3 个答案:

答案 0 :(得分:1)

我可能对此有解决方案,但不知道如何在此处申请。可能在这里:https://www.periscopedata.com/blog/splitting-comma-separated-values-in-mysql

请有人向我解释如何在此处申请相同的内容。

答案 1 :(得分:0)

如果您只想计算行中逗号分隔的值,则可以使用:

SELECT SUM(LENGTH(attack_type) - LENGTH(replace(attack_type, ',', '')) +1) AS TotalCount
FROM table_name;

答案 2 :(得分:0)

因此,我终于设法仅使用select来完成我的工作。仅当您的数据集有限或明确少于64个值时,此方法才有效。

  1. 将列数据类型更改为“设置”类型。然后输入您的设置值。
  2. 现在使用sql的select,count,find_in_set和union函数。
  3. 示例:
    union select 'Un-patched Vulnerable Software Exploitaion'as type, count(*) as number from data_input_test where find_in_set('Un-patched Vulnerable Software Exploitaion',attack_type)```
    

依次显示所有值

我知道这不是你应该怎么做,但正如传说所说的那样??