Php 当响应以逗号分隔的字符串存储在mysql行(Google Form->mysql)中时,计算顶部复选框响应

Php 当响应以逗号分隔的字符串存储在mysql行(Google Form->mysql)中时,计算顶部复选框响应,php,mysql,Php,Mysql,表单的复选框在mysql中以逗号分隔的值作为字符串存储在一行中。我无法控制这一切 在尝试获取最上面的响应时,我会运行以下命令,以查找响应的内容以及它们出现的次数: $query=选择'answer',将*从'responses'中计算为CNT,其中'answer'按'answer'分组,按CNT DESC排序 不计算单个逗号分隔值,而是计算它们的组合 例如,4个人提交复选框A和B。2只选择A,1选择A和B,1选择B 上面的查询结果如下所示: A (2) A,B (1) B (1) a a a

表单的复选框在mysql中以逗号分隔的值作为字符串存储在一行中。我无法控制这一切

在尝试获取最上面的响应时,我会运行以下命令,以查找响应的内容以及它们出现的次数:

$query=选择'answer',将*从'responses'中计算为CNT,其中'answer'按'answer'分组,按CNT DESC排序

不计算单个逗号分隔值,而是计算它们的组合

例如,4个人提交复选框A和B。2只选择A,1选择A和B,1选择B 上面的查询结果如下所示:

A (2)
A,B (1)
B (1)
a 
a
a 
b 
b
我想要实现的是将逗号分隔的值分离并产生:

A (3)
B (2)
我看到了一些php爆炸示例,并尝试了以下方法:

如果$result->num_rows>0{ 而$rows=mysqli\u fetch\u assoc$result{ $ans=分解“,”,$rows[“答案”]; foreach$ans作为$separated{ 回声。$分离。; } } 结果如下:

A (2)
A,B (1)
B (1)
a 
a
a 
b 
b
现在,我如何存储它们进行计数,然后从最选中的到最不选中的排序

我使用explode的最佳方法是什么?还是有其他更简单、更符合逻辑的方法

这个链接解释了这个问题,他们有一个google端修复程序,但mysql没有命令:

谢谢

如下所述,新代码为:

$query=从'responses'中选择'ans_4',其中'ans_4'; $result=$conn->query$query; 如果$result->num_rows>0{ $ans=[]; 而$rows=mysqli\u fetch\u assoc$result{ $ans=array_merge$ans,explode',',$rows['answer']; } $count=数组\计数\值$ans; 阿索特$计数; foreach$计数为$key=>$value{ echo$key$value; }
显然,这不是存储它们的最佳方式,我不确定您是否可以在查询中这样做。但您可能只想选择该列:

SELECT `answer` FROM `responses` WHERE `answer` <> ''
$count数组应该会产生如下结果:

Array
(
    [A] => 3
    [B] => 2
)
然后,如果需要按降序排序:

arsort($count);
对于PDO:

$stmt=$pdo->querySELECT ans_4 FROM responses,其中ans_4; $ans=[]; 而$rows=$stmt->fetchPDO::FETCH_ASSOC { $ans=array_merge$ans,explode',',$rows['ans_4']; } $count=数组\计数\值$ans; 阿索特$计数; 回应最大的关切; foreach$计数为$key=>$value{ echo$key$value; }
谢谢你,用这个修改过的问题让别人可以使用,你让我整理好了!