PHP & MySQL 显示平均值

PHP & MySQL display average

好的,我已经在互联网上搜索了几个小时试图解决这个问题,但我仍然完全迷失了方向,所以非常欢迎一些帮助或指出正确的方向。

我有一个 MySQL 查询,我在其中计算一列的平均值,一切正常。它在显示它是我遇到问题的地方。

我已转储 $results 变量,它 returns 如下:

array(1) { [0]=> object(stdClass)#1826 (2) { ["page_id"]=> string(1) "5" ["avg(r_location)"]=> string(6) "4.0000" } } 

我从 echo $row... 得到的错误是:

Fatal error: Cannot use object of type stdClass as array

我的代码如下

function returnResults() {

    $postid = get_the_ID();

    global $wpdb;

    $results = $wpdb->get_results(" SELECT page_id, avg(r_location) FROM wp_ratings WHERE page_id = '$postid' ");

    var_dump($results);

    foreach ($results as $row) {
            echo $row['avg(r_location)'];

    }

}

Fatal error: Cannot use object of type stdClass as array

错误消息告诉你一切。您正在尝试将对象用作数组。

由于结果是对象数组而不是数组,因此您需要像这样为查询添加别名:

$results = $wpdb->get_results("SELECT page_id, avg(r_location) average 
                               FROM wp_ratings 
                               WHERE page_id = '$postid'");

然后您可以访问每个值:

foreach($results as $row) {
  echo $row->average;
}

请注意,get_results() 采用第二个参数 $output_type,它控制 return 值。要获得关联数组的结果,您可以添加 ARRAY_A 作为第二个参数:

$results = $wpdb->get_results("SELECT page_id, avg(r_location) average 
                               FROM wp_ratings 
                               WHERE page_id = '$postid'", ARRAY_A);

foreach($results as $row) {
  echo $row['average'];
}

在这种情况下,您并不是真的被迫添加别名。您可以像以前一样访问数组 echo $row['avg(r_location)'];

首先更正您的查询:

SELECT page_id, avg(r_location) as locat FROM wp_ratings WHERE page_id = '$postid'  

然后像这样访问它:

foreach($result as $row){
 $row->locat;
}