我有这个.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>";
}
答案 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,但它是一个这样做的好习惯。