Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос! / 9 сообщений из 9, страница 1 из 1
11.07.2018, 10:12
    #39672401
atillus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос!
Добрый день всем!

Есть таблица товаров (`prods`):
`prod_id`, `prod_name`, `prod_desc` и т.д...

И таблица отзывов о товарах (`reviews`):
`rev_id`, `rev_prod`, `rev_rating`, `rev_text` и т.д...

Связь: `reviews`.`rev_prod` => `prods`.`prod_id`

В поле `rev_rating` пишется "оценка" товара (число от 0 до 5)

Мне нужно получить одним запросом среднюю оценку по каждому товару...

Я пробовал так:

Код: sql
1.
SELECT `prod_id`, `prod_name`, `prod_desc`, AVG(`rev_rating`) as `avg_rating` FROM `prods`, `reviews`;



Но в результате получаю только один товар...
...
Рейтинг: 0 / 0
11.07.2018, 10:28
    #39672408
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос!
atillus,

добавьте в конец запроса : group by prod_id`, `prod_name`, `prod_desc`
...
Рейтинг: 0 / 0
11.07.2018, 10:45
    #39672414
atillus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос!
Анна, да, так он отдает все товары, но рейтинг одинаков, т.е. он не считает по каждому AVG()... Тут что-то сложнее по-видимому, какие-то подзапросы нужно использовать... :(
...
Рейтинг: 0 / 0
11.07.2018, 11:06
    #39672427
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос!
atillus,

условия соединения таблиц ещё требуется указать. иначе у вас получается декартово произведения - каждая строка из prods соединяется со всеми строками из reviews. в итоге - по каждому товару имеем полный набор отзывов, даже тех, которые к этому товару не относятся...
...
Рейтинг: 0 / 0
11.07.2018, 11:09
    #39672434
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос!
atillus,

пока ещё не привыкли к плохому - сразу учитесь писать соединения источников данных через JOIN, а не через "запятую" + условия в where.


то есть, у вас должен получится запрос примерно такой структуры:
Код: sql
1.
2.
3.
4.
5.
select prod_id, prod_name, prod_desc, AVG(rev_rating) as avg_rating 
  FROM prods p
  JOIN reviews r
    ON p.prod_id = r.rev_prod
 group by prod_id, prod_name, prod_desc;
...
Рейтинг: 0 / 0
11.07.2018, 11:13
    #39672439
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос!
atillusМне нужно получить одним запросом среднюю оценку по каждому товару...А если на товар нет отзывов?
...
Рейтинг: 0 / 0
11.07.2018, 11:20
    #39672442
atillus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос!
Анна, спасибо. Прояснилось...
...
Рейтинг: 0 / 0
11.07.2018, 11:23
    #39672443
atillus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос!
Akina, если нет отзывов, то и рейтинга пока нет... или эти товары вообще не попадут в выдачу при таком запросе?
...
Рейтинг: 0 / 0
11.07.2018, 12:06
    #39672471
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос!
atillusAkina, если нет отзывов, то и рейтинга пока нет... или эти товары вообще не попадут в выдачу при таком запросе?не попадут вообще. если они нужны, но с нулевым рейтингом, то читать про внешние ([LEFT | RIGHT] {OUTER} JOIN) соединения.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос! / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]