首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql查询每个用户的求和

MySql查询每个用户的求和
EN

Stack Overflow用户
提问于 2018-11-27 23:07:12
回答 3查看 1.1K关注 0票数 3

我有有评级的用户,我想显示每个用户的总评等量。我有两个表:用户和反馈。我在users表中有4个用户。在表反馈(由applicant_id和app_experience列组成)中,我有每个用户的评级。但是,我对每个人都有几分评价。

代码语言:javascript
复制
  $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个用户,因为在表反馈中,有2个用户还没有任何反馈:

代码语言:javascript
复制
  foreach ($res4 as $row) 
  {
   echo "".$row['applicant_id']."----".$row['app_experience']."";
   echo "<br>";
  }

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

我正在做类似的事情,但我不知道在下面的代码中添加上面的foreach循环。你有什么主意吗?:

代码语言:javascript
复制
 $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'];
 }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-27 23:16:54

您只需修改以下语句:

代码语言:javascript
复制
$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";

致:

代码语言:javascript
复制
$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

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

票数 1
EN

Stack Overflow用户

发布于 2018-11-27 23:15:39

代码语言:javascript
复制
SELECT users.*, (SELECT SUM(app_experience) FROM feedback WHERE applicant_id = users.id) as feedback FROM users

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

票数 0
EN

Stack Overflow用户

发布于 2018-11-27 23:56:30

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

你似乎想要一个LEFT JOIN

代码语言:javascript
复制
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的一个app_experience值。如果您想要一个值(如0),请使用COALESCE(SUM(f.app_experience), 0)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53509602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档