【问题标题】:How to calculate the percentage from MYSQL database using PHP?如何使用 PHP 从 MYSQL 数据库中计算百分比?
【发布时间】:2020-06-07 13:45:59
【问题描述】:

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

id    user    type
1    JOhnT  Positive
2    JOhnT  Negative
3    Sarah  Positive
4    JOhnT  Positive
5    JOhnT  Neutral
....................

我需要为每个使用 PHP 的用户获取 percentagePOSITIVE 反馈。

我尝试过这样的事情,但我知道这是错误的:

$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;

有人可以就如何实现这一点提出建议吗?

编辑:

基于 cmets,这是我目前所拥有的:

$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?////


}
}   

我最终创建了一个数组,并将整个循环中的每个 $row 推入数组,然后计算如下百分比:

   $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"];
}

现在这工作正常。

【问题讨论】:

  • mysqli_error($db_conx) 透露了什么?
  • @FunkFortyNiner,没有错误。
  • 如果您想将这些内容呼应出来,那么您的做法不正确。您正在尝试回显结果集。您需要使用循环。
  • 请解释问题所在。你没有得到结果,数据不正确? PHP也与该问题相关还是这是一个查询问题?如果你想在 PHP 中计算(我不会)不要使用聚合函数,返回所有数据然后在 PHP 中聚合和计算。
  • 不,你误解了他们。他们说不要在 PHP 中这样做。在 MySQL 中进行。

标签: php mysql sql group-by average


【解决方案1】:

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

select user, avg(type = 'Positive') positive_ratio
from feedback
group by user

这为每个user 提供了一个介于01 之间的值,表示正types 的比率。如果需要百分比,可以将其乘以 100

如果您想要单个用户的此信息,您可以使用where 子句进行过滤(并且不需要group by):

select user, avg(type = 'Positive') positive_ratio
from feedback
where user = 'JOhnT'

旁注:usera MySQL keyword,因此不是一个好的列名选择。

【讨论】:

  • 我应该如何在 PHP 中使用这个查询?我的意思是我如何回显结果?
  • @user2056633:您是在问如何在 PHP 中执行查询并获取结果?这是基本的 MySQL/PHP 用法,你可以在野外找到很多关于如何继续的教程。
  • 不,不.. 我在问如何回显您的答案中的“positive_ratio”结果。那是一个索引。不是吗?
  • @user2056633 这是一个别名。如果以关联方式获取,则它是 PHP 中数组的索引。所以在你之前的代码$row['positive_ratio'] 中删除while 因为我相信这只会返回 1 行。
猜你喜欢
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 2013-11-15
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多