-2

我有这个.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>";    
        }
4

1 回答 1

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,但这样做是一个好习惯。

于 2013-03-15T02:09:35.480 回答