php - PHP MySql 查询获取每个用户的总和
问题描述
我有评分的用户,我想显示每个用户的评分总数。我有 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'];
}
解决方案
您只需要修改以下语句:
$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
使用此解决方案,您无需循环。
推荐阅读
- javascript - 无法使用 .Net(C#)从 ActiveX 向客户端触发事件
- javascript - 如何在动作调用中添加回调函数
- python - 使用 Cygwin OpenSSH 在 Windows 上的 Paramiko 找不到 known_hosts 文件
- javascript - 将 xml ComboBox 转换为 javascript 视图
- xamarin.android - 为什么 Xamarin 分析器不断打开 mlpd 文件?
- mysql - MYSQL 选择算术与列结果
- html - 如何获取网站上使用的所有字体系列的列表?
- c# - WCF Web 服务 DataContract 数组
- python - mousePressEvent 不适用于子小部件?
- java - Java 8:流的映射函数中的多个条件