mysql_num_rows()不适用于SUM()?

时间:2010-10-23 23:05:05

标签: php mysql

当没有匹配的行存在时,使用PHP mysql_num_rows()在下表中运行下面的查询时返回“1”。

经过测试,我发现在查询中使用SUM()函数时会出现问题。如果我从查询中取出SUM(),mysql_num_rows()就像它应该返回“0”。

我应该使用其他东西而不是mysql_num_rows()来查明表中是否有匹配的行?

表:

name | students_money | grade
George | 5 | A
Bill | 10 | A
Dan | 7 | A

代码:

$sql = "SELECT SUM(students_money) AS sum_money FROM students_table WHERE name = 'Tom' AND name = 'Jack'";
$result = @mysql_query($sql, $con) or die(mysql_error());

$num_rows = mysql_num_rows($result);

if ($num_rows < 1) {

    echo "not everyone has paid";
    exit;

}

while($row = mysql_fetch_array($result)) {

    $sum_money = $row[sum_money];
    $total = $total + $sum_money;

}

2 个答案:

答案 0 :(得分:4)

SUM()是一个聚合函数。它将获取为组返回的所有行并将其添加。

由于您没有GROUP BY子句,因此它会将所有行的值相加,即使没有。然后它将总数作为单行返回,因此应该只有1行。

如果你澄清了你想要归还的内容,我可以尝试帮你写一份声明来归还它。

答案 1 :(得分:3)

mysql_num_rows()告诉您数据库查询返回的行数。在你的情况下总是有一行返回,因为总有一个总和。当然,总和可能是0。

在mysql查询浏览器中测试查询可能是个好主意。也许你正在寻找这样的东西?

SELECT name, SUM(students_money) AS sum_money 
FROM students_table
GROUP BY name;

这将按名称对总和进行分组。要跳过0总和,您可以添加:

HAVING sum_money > 0;