图形总体的数组中的响应百分比



我有一个小查询,它可以正确生成响应的百分比。

$pdo->query("SELECT avg(pineapple = 'yes')*100 FROM responses");

但我需要做的是,将列question1,2,3,4列放在一起,它们排列为columnname=>我的图表的百分比。

由于SELECT中没有两个字段,我不清楚如何像以前那样设置数组:

$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
$jsnarray = array();
$json = json_encode($results);
foreach($results as $k => $v){
$jsnarray[] = array('question' => $results[$k]['COLUMN???'], 'value' => $results[$k]['question1']);
};

更新:为了明确所需的输出:一个类似于的数组

[column1name] => column yes response %
[column2name] => column2 yes response %

所以理论上是:

[pineapple] => 55%
[cheesecurds] => 80%

这使得条形图可以标记为菠萝,值为55%,依此类推

您应该规范化数据库设计。在当前的设计中,您必须分别列出每一列。如果你需要添加一种新的成分,会发生什么?

您可以修改现有的SQL来计算每列的平均值,如下所示:

SELECT 
avg(pineapple = 'yes')*100 AS pineapple, 
avg(mushroom = 'yes')*100 AS mushroom, 
avg(anchovy = 'yes')*100 AS anchovy, 
avg(cheesecurd = 'yes')*100 AS cheesecurd
FROM responses

然后在PHP中,您可以像访问其他列一样访问它。

$averages = $stmt->fetch(PDO::FETCH_ASSOC);
echo "Anchovies: ".$averages['anchovy'];

对于使用从谷歌表单导入的非规范化数据库:

$stmt = $pdo->query("SELECT 100*avg(pineapple = 'yes') AS Pineapple, 100*avg(pepperoni = 'yes') AS Pepperoni, 100*avg(mushrooms = 'yes') AS Mushrooms, 100*avg(anchovies = 'yes') AS Anchovies FROM responses");
$averages = $stmt->fetch(PDO::FETCH_ASSOC);
$jsonEncodedData=json_encode($averages);
header( 'Content-type: application/json' );
echo $jsonEncodedData;

我的百分比平均为100*。

再说一遍,如果你能帮上忙的话,就不要用这个。

最新更新