2010-09-22 150 views
1

結果總是1:mysql_num_rows始終返回1

$sql = 'SELECT COUNT(Vote) FROM ' . $table; 
$res = mysql_query($sql, $conn); 
$vote_total = mysql_num_rows($res); 

我跑在phpMyAdmin的$ sql查詢並返回3,因此查詢是沒有問題的。 $ vote_total被全局初始化爲0,所以1來自某個地方。我還需要提供哪些其他信息才能讓我更輕鬆?

謝謝, 瑞恩

回答

9
mysql_num_rows

返回選定的行和一個特定行的不字段的數量。

$sql = 'SELECT COUNT(Vote) FROM ' . $table; 
$res = mysql_query($sql, $conn); 
$row = mysql_fetch_row($res); 
$vote_total = $row[0]; 

你也可以使用mysql_result獲取一行,並獲得了一定的領域:

$vote_total = mysql_result($res, 0, 0); 

這將提取的第一行(從零開始使用mysql_fetch_row獲取該行已與您的查詢選擇)並返回第一個字段(基於零)。

+0

在這種情況下,所有我需要做的是找出有多少行是在表中。因此,我可以使用mysql_num_rows。但「投票」列包含三個值之一:A,B或C.如果我現在要計算A,B或C出現的次數,我也會使用num_rows,對不對?只有當我需要數據時,抓取行纔是正確的?謝謝,瑞安。 – NightHawk 2010-09-22 19:51:54

+0

其實,我猜不是,因爲mysql_num_rows不起作用。你是說表示行數的值存儲在一個字段中,這就是爲什麼我需要使用mysql_fetch_row或_array獲取該字段的原因? – NightHawk 2010-09-22 19:57:35

+0

@Ryan S .:您需要使用不同的查詢:'SELECT Vote,COUNT(Vote)FROM table GROUP BY Vote'。這將返回三行(每個* Vote *值一個)與兩個字段(* Vote *和具有該值的行數)。 – Gumbo 2010-09-22 20:03:22

2

只會有一行。在這一行將是票數。

$sql = 'SELECT COUNT(Vote) FROM ' . $table; 
$res = mysql_query($sql, $conn); 
$vote_array = mysql_fetch_array($res); 
$vote_total = $vote_array[0]; 

如果你想與mysql_num_rows算選票的數量,您必須選擇所有行。

+0

要選擇所有行,這是在WHERE子句中完成的? – NightHawk 2010-09-22 19:59:29

1

棘手的部分是,即使sql查詢包含一個COUNT()語句,它仍然是一個查詢結果像任何其他。如果你發出了一個reglar查詢,MySQL將返回一個包含單個列的行和返回的行數。另一方面,mysql_num_rows()只計算實際執行的查詢結果中的行數。在這種情況下,它總是一排。

你想要的是:

$sql = 'SELECT COUNT(Vote) FROM ' . $table; 
$res = mysql_query($sql, $conn); 
$data = mysql_fetch_row($res); 
$vote_total = $data[0]; 
2

該查詢並返回只有一行。你需要的是從查詢檢索

$row = mysql_fetch_array($res); 
$vote_total = $row[0];