2010-09-22 68 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];