AVG()函数总是返回“数组”

时间:2010-08-15 12:18:34

标签: php mysql sql

这就是我得到的,更新

$avg_query = "SELECT AVG(rating) AS avg_rating 
                FROM kicks 
               WHERE userid = '$userid'";

$avg_result = mysqli_query($cxn, $avg_query) or die("Couldn't execute query.");                         
$row = mysqli_fetch_assoc($avg_result);
$average = $row['avg_rating'];

每当我回复它时,它总是返回数组。从来没有使用过这个功能,但我不明白为什么会这样做。

4 个答案:

答案 0 :(得分:5)

你不应该在这里分配$ row吗?

$row = mysqli_fetch_assoc($avg_result);
$average = $row['AVG(rating)'];

当您选择函数调用的结果时,我还建议使用别名:

$avg_query = "SELECT AVG(rating) AS avg_rating FROM kicks WHERE userid='$userid'"
...
$average = $row['avg_rating'];

如果仍然没有给出任何结果,可能是因为:

  • 该用户的该表中没有行。
  • 该表中有一行,其中评级设置为NULL。

在第二种情况下,您可以通过过滤掉这些行来修复它:

SELECT AVG(rating) AS avg_rating
FROM kicks
WHERE userid='$userid'
AND rating IS NOT NULL

答案 1 :(得分:3)

$avg = mysqli_fetch_assoc($avg_result);
$average = $row['AVG(rating)'];

你在哪里得到$ row?

答案 2 :(得分:1)

字符串“Array”是PHP认为您希望它将数组转换为字符串时获得的字符串。如果你看到“Array”这个词你期望更有意义的输出,那就意味着你试图将包含数组的变量视为实际包含一个字符串。

当您从echo命令中看到此行为时,您可以尝试的一件事是在echo之前放置以下内容作为调试措施(假设您的变量名称为$var }):

echo '<pre>';
var_dump($var);
echo '</pre>';

然后您会看到类似

的内容
array(0) {
0 => string(3) 'cat'
1 => string(6) 'doggie'
}

这告诉您数组的结构及其键的含义。然后,您应该回顾一下代码并尝试找出当您预期字符串时变量包含数组的原因 - 也许您误解了标准库函数的行为,或类似的东西。

答案 3 :(得分:0)

不过,这应该是这样的:

$avg_query = "SELECT AVG(id) as average_id FROM unfollowr_users";
$avg_result = mysql_query($avg_query) or die("Couldn't execute query.");

$row = mysql_fetch_assoc($avg_result);
$average = $row['average_id'];
echo "$average\n";

AVG不是PHP函数,它是SQL函数。我们在SELECT时添加更好的名称。