php mysql query get sum per user每个用户

xytpbqjk  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(394)

我有评级的用户,我想显示每个用户的评级总额。我有两个表:用户和反馈。我在users表中有4个用户。在反馈表(包括申请者id和应用体验栏)中,我有每个用户的评分。但是,我对每个人都有不同的评价。

$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'];
 }
ldioqlga

ldioqlga1#

SELECT users.*, (SELECT SUM(app_experience) FROM feedback WHERE applicant_id = users.id) as feedback FROM users

在短sql中选择所有用户及其反馈

i7uaboj4

i7uaboj42#

您只需修改以下语句:

$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 当用户还没有反馈时。
使用此解决方案,您不需要循环。

zpgglvta

zpgglvta3#

如前所述,您的查询将不会运行。这个 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;

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

相关问题