PHP MySql Query Получить сумму на пользователя - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть пользователи с рейтингом, и я хочу показать общую сумму рейтинга каждого пользователя.У меня есть 2 таблицы: пользователи и отзывы.У меня 4 пользователя в таблице USERS.И в таблице ОБРАТНАЯ СВЯЗЬ (состоит из столбцов 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 пользователей, потому что в таблице ОБРАТНАЯ СВЯЗЬ 2 пользователей еще не оставили никаких отзывов:

  foreach ($res4 as $row) 
  {
   echo "".$row['applicant_id']."----".$row['app_experience']."";
   echo "<br>";
  }

У меня вопрос, как вывести всех 4 пользователей, и я хочу показать общее количество оценок рядом с каждым пользователем.

Я делаю что-то подобное, но не знаю, куда добавитьцикл foreach выше в коде ниже.У вас есть идеи?

1010 *

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Вам просто нужно изменить приведенный ниже оператор:

$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, когда пользователь еще не имеет обратной связи.

С этим решением вам не нужно выполнять цикл.

0 голосов
/ 28 ноября 2018

Как написано, ваш запрос не запустится.Предложение 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;

Thisвернет значение NULL для app_experience.Если вы хотите значение (например, 0), используйте COALESCE(SUM(f.app_experience), 0).

0 голосов
/ 28 ноября 2018
SELECT users.*, (SELECT SUM(app_experience) FROM feedback WHERE applicant_id = users.id) as feedback FROM users

Выбирает всех пользователей и их отзывы в коротком SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...