Php 投票系统-计算最大投票数
我有一个.php,我必须从数据库中计算最大投票数Php 投票系统-计算最大投票数,php,mysql,sql,sum,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票。我认为这是对所有选票的统计,而不是
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票。我认为这是对所有选票的统计,而不是对计数(v.cand_id)
上的特定人的统计
这张表是关于计票和显示最高得票人的
$que1=mysql\u查询($sql1,$con)
while($row1=mysql\u fetch\u数组($que1))
{
echo“主席:”;echo“.”第1行['fname'];echo“.”第1行['lname'];echo“拥有”.”第1行['v.cand_id'];echo“投票”;
回声“
”;
}
试试这个:
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;
需要注意的事项:
- 请尝试使用
子句避免旧的联接语法,并开始使用显式ANSI-92联接语法。在您发布的查询中,您在WHERE
子句中连接了表,但是对于tableWHERE
,没有连接条件,这可能是您获得错误数据的原因,因为在这种情况下,它是交叉连接两个表position pos
- 另外,尽量避免将聚合函数与不在聚合函数中的列一起使用,如果没有像您那样使用
子句,它将适用于MySQL,但这样做是一种很好的做法groupby
来自投票v,学生标准…
给出所有表格的叉积!抱歉,我忘了添加这个,我正在用.phpfile@user2172157-好的,用php代码中的这个查询替换您正在使用的查询;echo“$row1['fname'”;echo“$row1['lname'”;回声“有”。$row1['TotalVoces'”;呼应“投票”;而且它只显示了ABC有“1”票的人,它只显示了1票vote@user2172157您是否直接在MySQL上测试过这个查询?尝试仅运行查询并测试它。另外,尝试发布三个表中的一些示例数据,以及您正在寻找的所需输出。我通过删除DISTINCT实现了此功能,感谢帮助人员。:)
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;