2010-10-23 61 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