如何使用PHP计算MYSQL数据库中的百分比?

如何使用PHP计算MYSQL数据库中的百分比?,php,mysql,sql,group-by,average,Php,Mysql,Sql,Group By,Average,我有一个名为feedbacks的表,如下所示: id user type 1 JOhnT Positive 2 JOhnT Negative 3 Sarah Positive 4 JOhnT Positive 5 JOhnT Neutral .................... $c = count($values); $array = $values; function array_avg($arra

我有一个名为
feedbacks
的表,如下所示:

id    user    type
1    JOhnT  Positive
2    JOhnT  Negative
3    Sarah  Positive
4    JOhnT  Positive
5    JOhnT  Neutral
....................
   $c = count($values);
    $array = $values;       
    function array_avg($array, $round=1){
    $num = count($array);
    return array_map(
        function($val) use ($num,$round){
            return array('count'=>$val,'avg'=>round($val/$num*100, $round));
        },
        array_count_values($array));
}

$rating = 0;                    

if($c > 0){
$avgs = array_avg($array);
$rating = $avgs["positive"]["avg"];
}
我需要为每个使用PHP的用户获得
积极
反馈的
百分比

我试过这样的方法,我知道这是错误的:

$sql = "SELECT type, count(*), 
concat(round(( count(*)/(SELECT count(*) FROM feedbacks WHERE user='JOhnT' AND type='POSITIVE') * 100 ),2),'%') AS percentage 
FROM feedback 
WHERE user='$email' AND type='positive' GROUP BY type";
$query = mysqli_query($db_conx, $sqlJ);

echo $sql;
有人能就如何实现这一目标提出建议吗

编辑:

根据我的评论,到目前为止,我得到的是:

$sql = "SELECT * FROM feedbacks WHERE user='JOhnT' AND type='POSITIVE'";

$query = mysqli_query($db_conx, $sql) or die(mysqli_error($db_conx));

$productCount = mysqli_num_rows($query);

if ($productCount > 0) {
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){

 ///do I need to calculate the percentage here?//
//if so, how?////


}
}   
我最终创建了一个数组,并将整个循环中的每一个$行推送到数组中,然后像下面这样计算百分比:

id    user    type
1    JOhnT  Positive
2    JOhnT  Negative
3    Sarah  Positive
4    JOhnT  Positive
5    JOhnT  Neutral
....................
   $c = count($values);
    $array = $values;       
    function array_avg($array, $round=1){
    $num = count($array);
    return array_map(
        function($val) use ($num,$round){
            return array('count'=>$val,'avg'=>round($val/$num*100, $round));
        },
        array_count_values($array));
}

$rating = 0;                    

if($c > 0){
$avgs = array_avg($array);
$rating = $avgs["positive"]["avg"];
}

现在这很好用。

你可以用条件平均法来做。在MySQL中,您可以将其表述为:

select user, avg(type = 'Positive') positive_ratio
from feedback
group by user
这为每个
用户
提供了一个介于
0
1
之间的值,表示正
类型
的比率。如果您想要一个百分比,您可以将其乘以
100

如果要为单个用户提供此信息,可以使用
where
子句进行筛选(无需
分组):


旁注:
user
是,因此不是一个很好的列名选择。

mysqli\u错误($db\u conx)
揭示了什么?@FunkFortyNiner,没有错误。如果你想把这些内容重复出来,你做得不对。您正在尝试回显一个结果集。您需要使用循环。请解释什么是错误的。你没有得到结果,数据不正确?PHP是否与该问题相关,或者这是一个查询问题?如果你想在PHP中计算(我不会),不要使用聚合函数,返回所有数据,然后在PHP中进行聚合和计算。不,你误解了它们。他们说不要用PHP来做。我应该如何在PHP中使用这个查询呢?我的意思是如何回显结果?@user2056633:您是在问如何执行查询并在PHP中获取结果吗?这是MySQL/PHP的基本用法,你可以在野外找到很多关于如何继续的教程。。我在问你如何回应你答案中“正比例”的结果。这是一个索引。不是吗?@user2056633是个别名。如果以关联方式获取,则它是PHP中数组的索引。因此,在您以前的代码
$row['positive_ratio']
中,删除
,同时删除
,因为我相信这只会返回1行。