投票系统 - 计算最大投票数

时间:2013-03-15 02:06:12

标签: php mysql sql sum

我有这个.php,我必须从数据库中计算最大投票数

SELECT std.fname, std.lname, COUNT(v.cand_id)
FROM vote v, student std, candidate ca, position pos
WHERE v.cand_id = ca.stud_id AND ca.pos_id = 1 AND ca.stud_id = std.id

问题在于计数已关闭,它显示70票,而当我在数据库上计算它只有11票。我认为这是在计算所有选票而不是COUNT(v.cand_id)上的具体人物。

此表是关于计票和显示获得投票的最高人选。

$ que1 = mysql_query($ sql1,$ con);

    while($row1 = mysql_fetch_array($que1))
        { 


            echo "President: "; echo "".$row1['fname']; echo " ".$row1['lname']; echo " having ".$row1['v.cand_id']; echo " votes"; 

            echo "<br>";    
        }

1 个答案:

答案 0 :(得分:2)

请改为尝试:

SELECT 
  std.fname, 
  std.lname, 
  COUNT(v.cand_id) TotalVotes
FROM vote            AS v
INNER JOIN candidate AS ca  ON v.cand_id  = ca.stud_id
INNER JOIN student   AS std ON ca.stud_id = std.id
INNER JOIN position  AS pos ON ca.pos_id  = pos.id
WHERE ca.pos_id = 1
GROUP BY std.fname, 
         std.lname;

这将计算每个用户的投票数。

要仅显示获得总票数的最高人选,请尝试:

SELECT 
  std.fname, 
  std.lname, 
  COUNT(v.cand_id) TotalVotes
FROM vote            AS v
INNER JOIN candidate AS ca  ON v.cand_id  = ca.stud_id
INNER JOIN student   AS std ON ca.stud_id = std.id
INNER JOIN position  AS pos ON ca.pos_id  = pos.id
WHERE ca.pos_id = 1
GROUP BY std.fname, 
         std.lname
ORDER BY TotalVotes DESC
LIMIT 1;

需要注意的事项:

  • 请尝试以您的方式使用WHERE子句来避免旧的连接语法,并开始使用显式的ANSI-92连接语法。在您发布的查询中,您正在加入WHERE子句中的表,但是对于表position pos,没有连接条件,这可能是您获取不正确数据的原因,因为在此如果它正在交叉加入两个表格。

  • 此外,尽量避免将聚合函数与不在聚合函数中的列一起使用,而不像您那样使用GROUP BY子句,它将适用于MySQL,但它是一个这样做的好习惯。