0

我已经计算了投票给某个候选人的选民人数,我想显示哪一位获得了最高的投票数。我试图将它们存储在变量中,以便我可以使用 max() 方法,但我收到错误“未定义”。请帮助

  <?php 
 $query="select count(*) as total from voting Where ca_id=1";
  //ca_id is the candidate id that voter choose
 $result = mysql_query($query);
 $row = mysql_fetch_assoc($result);
 echo"$row[total]<br>";


 $query="select count(*) as total2 from voting Where ca_id=2";
 $result = mysql_query($query);
 $row2 = mysql_fetch_assoc($result);
 echo"$row2[total2]<br>";

 $query="select count(*) as total3 from voting Where ca_id=3";
 $result = mysql_query($query);
 $row3 = mysql_fetch_assoc($result);
 echo"$row3[total3]<br>";

 $query="select count(*) as total4 from voting Where ca_id=5";
 $result = mysql_query($query);
 $row4 = mysql_fetch_assoc($result);
 echo"$row4[total4]<br>";



?>
4

4 回答 4

3
SELECT count(1) co, ca_id FROM voting GROUP BY ca_id ORDER BY co DESC LIMIT 5
于 2013-05-21T14:10:14.897 回答
3

您不需要为此执行四个查询。您可以只使用一个查询。在你的情况下,你可以这样做:

select ca_id, count(*) as counter from voting group by ca_id order by counter desc

您可以通过单个查询获得结果

如前所述,在这种情况下,对于与数据库相关的调用,PDO 是更好的选择

于 2013-05-21T14:11:12.447 回答
2

请不要在新代码中使用 mysql_* 函数。它们不再被维护,并且已经开始弃用过程。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。

您可以使用类似使用 MySQLi 扩展的东西。

<?php

$mysqli = new mysqli('host', 'user', 'pass', 'db');

$sql   = "SELECT COUNT(votes) as vote_count, ca_id as candidate_id FROM voting GROUP BY ca_id ORDER BY vote_count DESC";
$result= $mysqli -> query($sql);

// Error Checking
if($mysqli -> error){
   echo 'Error: '.$mysqli -> error;
   exit;
}

while($row = $result -> fetch_object()){

   // Print out each candidate ID and the amount of votes they had.
   echo 'Candidate ID: '.$row -> candidate_id.', Votes: '.$row -> vote_count.'<br/>';

   // If you want to just show the highest voted candidate - put the data in an array
   $votes[$row -> vote_count] = $row -> candidate_id;

}

echo max(array_keys($votes));

这也会将您运行的查询数量减少到只有 1 个。

于 2013-05-21T14:11:52.747 回答
0

首先使用 group by 在一个查询中检索所有数据,而不是查询每个候选者:

SELECT ca_id, count(*) as total FROM voting GROUP BY ca_id

如果您需要获得最高票数的 id,请使用:

SELECT ca_id, count(*) as total FROM voting GROUP BY ca_id SORT BY total 
DESC LIMIT 1

注意:不是最有效的解决方案,但会比查询每个 ca_id 更快。

于 2013-05-21T14:13:34.220 回答