2010-10-23 55 views
0

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

经过测试,我发现问题发生在查询中使用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; 

} 

回答

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

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

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

如果您澄清了您想要返回的内容,我可以尝试帮助您编写声明以返回它。

+0

我希望能够检查Tom和Jack是否不在表中,同时还使用SUM()函数。这可能吗? – Mark 2010-10-23 23:15:10

+0

如果您想要返回两者的总和,则不能在单个查询中执行此操作。如果您想知道每个名称的总数,可以使用查询@nhnb写道。然后你可以在PHP中执行总和。否则,您需要执行查询以查看他们是否都支付了费用,然后再进行第二次查询以获得总和。 – 2010-10-23 23:22:34