[英]PHP MySql Query Get Sum Per User
我有用戶評分,我想顯示每個用戶的總評分。 我有2個表:用戶和反饋。 我在USERS表中有4個用戶。 在表FEEDBACK(由applicant_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
。
使用此解決方案,您無需循環。
SELECT users.*, (SELECT SUM(app_experience) FROM feedback WHERE applicant_id = users.id) as feedback FROM users
在短SQL中選擇所有用戶及其反饋
如上所述,您的查詢將無法運行。 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)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.