Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 28.01.2019
Сообщений: 28

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

04.05.2022, 18:57. Показов 1407. Ответов 1

Студворк — интернет-сервис помощи студентам
У меня есть SQL запрос для подсчета среднего рейтинга пользователя на сайте. Есть таблица users с информацией о пользователях и отдельная таблица ratings с оценками. Стараюсь подсчитать среднее арифметическое по каждому пользователю.

PHP
1
2
3
4
5
6
7
$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 рейтинг считается правильно, но вот с динамическим выводом проблема.

PHP
1
2
3
4
5
6
7
8
9
10
 $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>';}
Подскажите, пожалуйста, как исправить эту проблему и всем пользователям вывести свой рейтинг. Я новичок и не уверен, что вообще в правильном направлении двигаюсь для решения этой задачи.

Добавлено через 2 часа 17 минут
Кажется я смог добиться того же результата с помощью JOIN.

PHP
1
2
3
4
5
6
$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)){
    $final = round($resultr['AvgRat'], 2);
}
Но по-прежнему у всех отображается рейтинг одного и того же пользователя. Не пойму как создать цикл для вывода у каждого пользователя своего рейтинга.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2022, 18:57
Ответы с готовыми решениями:

Вывести средний балл студента и соответствующий буквенный рейтинг
Напишите функцию qualityPoints, которая получает средний балл студента и возвращает А, если средний балл составляет 90-100, В, если 80-89,...

Функции: вывести средний балл студента и соответствующий буквенный рейтинг
Напишите функцию qualityPoints, которая вводит средний балл студента и возвращает А, если средний балл составляет 90-100, В, если 80-89, С,...

Найти всех студентов, чей средний рейтинг выше 10 баллов, а последний рейтинг ниже 15 баллов
Даны фамилии студентов и элементы массива рейтингов, которые соответствуют элементам массива студентов. Нужно найти всех студентов, чей...

1
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
04.05.2022, 18:59
Лучший ответ Сообщение было отмечено AnthonyS как решение

Решение

Цитата Сообщение от AnthonyS Посмотреть сообщение
почему-то у всех отображается рейтинг одного и того же пользователя
Потому что значение $final переопределяется на каждой итерации; в итоге там содержится значение, присвоенное на последней итерации.
Цитата Сообщение от AnthonyS Посмотреть сообщение
не уверен, что вообще в правильном направлении двигаюсь для решения этой задачи
Да, подход не тот. Нет необходимости выполнять запросы в цикле. Нужно просто использовать JOIN.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$query = 'SELECT
    u.*,
    AVG(r.rating) RatAvg
FROM users u
LEFT JOIN ratings r
    ON r.user_id = u.id
WHERE u.id!='.$_SESSION ['user']['id'].'
GROUP BY u.id';
 
$sql = mysqli_query($connect, $query);
 
  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">'. $result['RatAvg'] .'</p>
        </div>';}
Вместо u.* лучше явно перечислить все нужные поля.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.05.2022, 18:59
Помогаю со студенческими работами здесь

Вывести среднее значение метаполя пользователя (общий рейтинг)
Добрый день! В wordpress в записях присваивается автор, в каждой записи есть произвольное поле &quot;rehub_review_overall_score&quot;. ...

посчитать средний балл и вывести ученика с такой-же оценкой как и средний балл
ребят как посчитать средний бал и вывести ученика с такой-же оценкой как и средний бал? Program zashitastroki; Uses crt; Type...

Структуры: вычислить средний рейтинг и выбрать все программы с рейтингом выше среднего
Буду признательна, если сможете помочь с кодом Данные о телевизионных программах: - название - частота (раз в неделю), - рейтинг ...

Записи. Структура: студентах: фамилия, год рождения, рейтинг. Найти средний балл
Вот условие: Ввести сведения о восьми студентах: фамилия, год рождения, рейтинг по предметам: алгоритмизация, история, дискретный анализ....

рейтинг пользователя
как на сайте происходит подсчет рейтинга пользователя..теоретически я догадываюсь, что в базе храниться интовое значение, потом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru