如何使用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行。