Php 当响应以逗号分隔的字符串存储在mysql行(Google Form->mysql)中时,计算顶部复选框响应
表单的复选框在mysql中以逗号分隔的值作为字符串存储在一行中。我无法控制这一切 在尝试获取最上面的响应时,我会运行以下命令,以查找响应的内容以及它们出现的次数: $query=选择'answer',将*从'responses'中计算为CNT,其中'answer'按'answer'分组,按CNT DESC排序 不计算单个逗号分隔值,而是计算它们的组合 例如,4个人提交复选框A和B。2只选择A,1选择A和B,1选择B 上面的查询结果如下所示: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
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;
}
谢谢你,用这个修改过的问题让别人可以使用,你让我整理好了!