我有一个小查询,它可以正确生成响应的百分比。
$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*。
再说一遍,如果你能帮上忙的话,就不要用这个。