簡體   English   中英

PHP MySql查詢獲取每用戶總和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM