Как вывести средний рейтинг пользователя из БД?

У меня есть 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.' &#9733</p>
        </div>';
    }

Подскажите, пожалуйста, как исправить эту проблему и всем пользователям вывести свой рейтинг. Я новичок и не уверен, что вообще в правильном направлении двигаюсь для решения этой задачи.


Ответы (1 шт):

Автор решения: Lothric

Ничего удивительного, переменная $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).' &#9733</p>
        </div>';  
}
→ Ссылка