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票。我认为这是对所有选票的统计,而不是

我有一个.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票。我认为这是对所有选票的统计,而不是对
计数(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;
需要注意的事项:

  • 请尝试使用
    WHERE
    子句避免旧的联接语法,并开始使用显式ANSI-92联接语法。在您发布的查询中,您在
    WHERE
    子句中连接了表,但是对于table
    position pos
    ,没有连接条件,这可能是您获得错误数据的原因,因为在这种情况下,它是交叉连接两个表

  • 另外,尽量避免将聚合函数与不在聚合函数中的列一起使用,如果没有像您那样使用
    groupby
    子句,它将适用于MySQL,但这样做是一种很好的做法


来自投票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;