Как вывести средний рейтинг пользователя из БД?
У меня есть SQL запрос для подсчета среднего рейтинга пользователя на сайте. Есть таблица users с информацией о пользователях и отдельная таблица ratings с оценками. Стараюсь подсчитать среднее арифметическое по каждому пользователю.
$sql = mysqli_query($connect, 'SELECT * FROM `users` WHERE `id`!='.$_SESSION ['user']['id'].'');
while ($result = mysqli_fetch_assoc($sql)) {
$sqlr = mysqli_query($connect, 'SELECT AVG(rating) AS RatAvg FROM ratings WHERE `user_id` = '.($result ['id']).'');
while ($resultr = mysqli_fetch_assoc($sqlr)){
$final = round($resultr['RatAvg'], 1);
}
}
На странице вывожу всех пользователей из БД и их средний рейтинг. Сейчас почему-то у всех отображается рейтинг одного и того же пользователя. По конкретному user_id рейтинг считается правильно, но вот с динамическим выводом проблема.
$sql = mysqli_query($connect, 'SELECT * FROM `users` WHERE `id`!='.$_SESSION ['user']['id'].'');
while ($result = mysqli_fetch_assoc($sql)) {
echo
' <div class="users_container">
<h>'. ($result ['user_name']) .' '. ($result ['user_surname']) .'</h>
<p class="user_list_info">'. ($result ['user_mail']) .'</p>
<p class="user_list_info">'. ($result ['user_phone']) .'</p>
<p class="user_list_info">г. '. ($result ['user_city']) .'</p>
<p class="user_list_rate">'.$final.' ★</p>
</div>';
}
Подскажите, пожалуйста, как исправить эту проблему и всем пользователям вывести свой рейтинг. Я новичок и не уверен, что вообще в правильном направлении двигаюсь для решения этой задачи.
Ответы (1 шт):
Ничего удивительного, переменная $final постоянно перезаписывается при прохождении цикла, так как это не массив:
$final = round($resultr['RatAvg'], 1);
Проще всего выводить информацию сразу по получению от БД:
$sqlr = mysqli_query($connect, 'SELECT AVG (ratings.rating) as AvgRat, users.id FROM ratings JOIN users ON users.id = ratings.user_id');
while ($resultr = mysqli_fetch_assoc($sqlr)){
echo
' <div class="users_container">
<h>'. ($resultr ['user_name']) .' '. ($result ['user_surname']) .'</h>
<p class="user_list_info">'. ($resultr ['user_mail']) .'</p>
<p class="user_list_info">'. ($resultr ['user_phone']) .'</p>
<p class="user_list_info">г. '. ($resultr ['user_city']) .'</p>
<p class="user_list_rate">'.round($resultr['AvgRat'], 2).' ★</p>
</div>';
}