【问题标题】:PHP MySql Query Get Sum Per UserPHP MySql 查询获取每个用户的总和
【发布时间】:2019-04-29 18:42:58
【问题描述】:

我有用户评分,我想显示每个用户的评分总数。我有 2 个表:用户和反馈。我在 USERS 表中有 4 个用户。在 FEEDBACK 表(由申请人 ID 和 app_experience 列组成)中,我有每个用户的评分。但是,我对每个人都有几个评分。

  $sql4 = "
 SELECT SUM(app_experience) as app_experience
     , applicant_id 
  FROM feedback f
  JOIN users u
    ON u.id=f.applicant_id 
 GROUP 
    BY feedback.applicant_id
";
  $res4 = mysqli_query($db,$sql4) or die(mysqli_error($db)); 

这是我的输出,但它只打印了 2 个用户,因为在表 FEEDBACK 2 中的用户还没有任何反馈:

  foreach ($res4 as $row) 
  {
   echo "".$row['applicant_id']."----".$row['app_experience']."";
   echo "<br>";
  }

我的问题是如何输出所有 4 个用户,我想在每个用户旁边显示评分总数。

我正在做这样的事情,但我不知道在下面的代码中在哪里添加上面的 foreach 循环。你有什么想法吗?:

 $sql2 = "SELECT * FROM users";
 $res2 = mysqli_query($db,$sql2) or die(mysqli_error($db));
 while($row2 = mysqli_fetch_assoc($res2))
 {
   $id = $row2['id'];
   $name = $row2['name'];
 }

【问题讨论】:

  • 使用LEFT JOIN 而不是INNER JOINCOALESCE(SUM(app_experience), 0)
  • 好的,但是我应该把foreach循环和while循环放在哪里?

标签: php mysql sql join


【解决方案1】:
SELECT users.*, (SELECT SUM(app_experience) FROM feedback WHERE applicant_id = users.id) as feedback FROM users

在简短的 SQL 中选择所有用户及其反馈

【讨论】:

  • 它显示了所有用户,但我无法向其添加更多数据并在页面上显示。例如,我想显示用户的申请者 ID 和用户名。我应该什么时候放置这些列?
  • 如果申请人 _id 与您的代码中的 users.id 相同,则它是 $row['id'] 和 $row['username'],您可以从用户表中选择用户。*
【解决方案2】:

你只需要修改下面的语句:

$sql4 = "SELECT SUM(app_experience) as app_experience, applicant_id FROM feedback INNER JOIN users ON users.id=feedback.applicant_id GROUP BY feedback.applicant_id";

到:

$sql4 = "SELECT COALESCE(SUM(app_experience), 0) as app_experience, applicant_id FROM users LEFT JOIN feedback ON users.id=feedback.applicant_id GROUP BY users.id";

users LEFT JOIN feedback ... 子句将允许查询返回一行,即使对于还没有反馈的用户也是如此。

当用户还没有反馈时,COALESCE(SUM(app_experience), 0) 将评估为 0

使用此解决方案,您无需循环。

【讨论】:

  • 当我尝试这样做时,它只向我显示有一些评分的用户。其他 2 名用户失踪。我使用了左连接,但它不起作用。你知道我错过了什么吗?
  • 可能是“group by”子句造成的,刚刚编辑了我的答案,请再试一次好吗?
  • 谢谢。您的解决方案效果很好。谢谢您的帮助。欣赏它。
  • 欢迎@Kaloyan!
【解决方案3】:

正如所写,您的查询不会运行。 GROUP BY 子句引用 feedback,但该引用已被别名更改为 f

你似乎想要LEFT JOIN

SELECT u.id, SUM(f.app_experience) as app_experience
FROM feedback f LEFT JOIN
     users u
     ON u.id = f.applicant_id 
GROUP BY u.id;

这将为app_experience 返回一个NULL 值。如果您想要一个值(例如0),请使用COALESCE(SUM(f.app_experience), 0)

【讨论】:

    猜你喜欢
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2011-03-13
    • 2022-07-07
    相关资源
    最近更新 更多