【问题标题】:Guidance with a SQL query - results duplicatingSQL 查询指导 - 结果重复
【发布时间】:2019-03-17 17:47:15
【问题描述】:

真的需要一些指导,我有一个网站,人们可以将图像上传到比赛并获得结果(分数),我想拿出一个领导委员会来看看每个人的表现如何。但是,我的 SQL 查询中有重复的人名,有人可以告诉我在哪里更改我的查询,以便将参加 3 场比赛的 1 人的结果相加,并且在输出中只说明一次总分。结果保存在tblMembEntCompfldResult

我目前得到的:

我的 PHP 代码:

<p><b>LEADERSHIP BOARD</b></p>
<?php
    $query = "SELECT `tblMember`.`fldFName`, `tblMember`.`fldSName`, `tblMembEntComp`.`fldResult` FROM `tblMember` AS `tblMember` JOIN `tblMembEntComp` as `tblMembEntComp` ON `tblMember`.`fldMemberID` = `tblMembEntComp`.`fldMemberID`ORDER BY `fldResult` DESC";

    $result = $conn -> query($query);

    while($row = $result -> fetch_assoc()) 
        {
            echo $row['fldFName']." ".$row['fldSName']." ".$row['fldResult']."<br>";
        } 
?>

更新: 我已经按照下面用户的建议尝试了GROUP BY 函数,但是我得到了错误:

【问题讨论】:

  • 您可以使用用户独有的东西来检索当前分数。例如电子邮件地址
  • 名称是否唯一? group bysum 浮现在脑海
  • 嗨@user3783243我还没有使用SUM,你知道这个SUM在查询中会去哪里吗?
  • 视情况而定,如果名称不是唯一的,您将无法使用它,因为您会将两个不同的人加在一起。
  • @user3783243 所以是的,会有唯一的fldMemberID 的?

标签: php sql phpmyadmin


【解决方案1】:

您似乎想要一个聚合查询。比如:

SELECT m.fldSName, SUM(mec.fldResult) as fldResult
FROM tblMember m JOIN 
     tblMembEntComp mec
     ON m.fldMemberID =mec.fldMemberID
GROUP BY m.fldSName
ORDER BY SUM(mec.fldResult) DESC

【讨论】:

  • 我认为这已经完成了,但是我完全不明白这个逻辑,作为一个新手。所以m.mec. 只是占位符,如果你喜欢表名写简写?请在哪里添加 fldFName 到输出中,所以它的名字,姓氏,然后是结果:-) P.S 你摇滚
  • @K.Haydock 。 . . mmec表别名。它们用作表名的缩写来限定列(即,包括列名中的表引用,如m.fldSName)。
  • 知道了,谢谢,我尝试在 SELECT 之后的开头添加 m.fldFname 但它不喜欢那样。您知道添加该列的正确位置,因此输出为 firstName、surName、Result :-)
  • @K.Haydock 。 . .您包含在 SELECT 中的任何列都需要是聚合函数(例如 MIN())或 GROUP BY 子句中的参数。
  • 嗨@GordonLinoff 我知道已经有一段时间了,但是我重新阅读了查询,并认为我重复了您在表名之后放置 m 和 mec 的表名,即@987654330 @ 所以我删除了其中一个,查询不再起作用,请问为什么我们一个接一个地重复表名?
【解决方案2】:

您应该按如下tblMember主键按查询分组:

<?php
    $query = "SELECT `tblMember`.`fldFName`, `tblMember`.`fldSName`, `tblMembEntComp`.`fldResult`, `tblMember`.`fldId` FROM `tblMember` AS `tblMember` JOIN `tblMembEntComp` as `tblMembEntComp` ON `tblMember`.`fldMemberID` = `tblMembEntComp`.`fldMemberID` GROUP BY `tblMember`.`fldId` ORDER BY `fldResult` DESC";

    $result = $conn -> query($query);

    while($row = $result -> fetch_assoc()) 
        {
            echo $row['fldFName']." ".$row['fldSName']." ".$row['fldResult']."<br>";
        } 
?>

您可以按字段更新分组作为主键。希望对你有帮助:)

【讨论】:

  • 还需要一个SUM。否则查询只会随机选择多个值之一并显示它。
  • 嗨,我用 GROUP BY tblMember.fldMemberID 尝试了上述方法,但是我得到了一个错误:#1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'photographyclub.tblMembEntComp.fldResult' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
  • @K.Haydock 您使用的是 mysql 5.7+?
  • MAMP 5.2,它在它的主页上说它是最新的:-)
  • @K.Haydock 我不知道MAMP,你能连接到mysql实例看看它在运行什么吗? select @@version.
猜你喜欢
  • 2020-08-28
  • 2023-03-18
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多