Как создать запрос на вывод по количеству отзывов?
Помогите составить запрос SQL для выполнения задания
Есть две таблицы - magazin и otziv которые имеют поля
magazin
id|name|gorod
otziv
id|name|text|magaz_id
Задание:
Вывести магазины сортируя их по количеству отзывов - от большего к меньшему
Поле id из таблицы magazin связано с полем magaz_id из таблицы otziv
У меня пока только получилось их просто вывести c сортировкой по id:
SELECT id,name,gorod FROM magazin WHERE gorod=$gorods ORDER BY id DESC LIMIT 20 |
SELECT id,name,gorod FROM magazin WHERE gorod=$gorods ORDER BY id DESC LIMIT 20
Как я понимаю нужно сделать подзапрос с COUNT и JOIN но никак не получается у меня
Дополнительно:
У меня пока только получилось их просто вывести c сортировкой по id:
Переходите на второй этап усложнения, добавьте вторую таблицу в запрос.
На следующем шаге попробуйте group by + count() - так и решите задачу.
В таблице magazin, какой атрибут является первичным ключом?
SELECT magazin.id, -- укажи явно таблицу в выборке, потому что у тебя теперь есть две таблицы с полем id magazin.name, -- укажи явно таблицу в выборке, потому что у тебя теперь есть две таблицы с полем name gorod, COUNT(otziv.id) AS 'quantity' -- добавь количество отзывов в выборку. Это не обязательно, работать будет и без этого шага FROM magazin LEFT JOIN otziv ON (otziv.magaz_id = magazin.id) -- присоедини таблицу WHERE gorod=$gorods GROUP BY magazin.id -- добавь группировку ORDER BY COUNT(otziv.id) DESC -- поменяй сортировку LIMIT 20 |
SELECT magazin.id, -- укажи явно таблицу в выборке, потому что у тебя теперь есть две таблицы с полем id magazin.name, -- укажи явно таблицу в выборке, потому что у тебя теперь есть две таблицы с полем name gorod, COUNT(otziv.id) AS 'quantity' -- добавь количество отзывов в выборку. Это не обязательно, работать будет и без этого шага FROM magazin LEFT JOIN otziv ON (otziv.magaz_id = magazin.id) -- присоедини таблицу WHERE gorod=$gorods GROUP BY magazin.id -- добавь группировку ORDER BY COUNT(otziv.id) DESC -- поменяй сортировку LIMIT 20
PS Я бы крайне не рекомендовал использовать транслитерированный русский в названии полей никогда.
- Большое спасибо за такое четкое и ясное разъяснение, вы мне очень помогли продвинуться в понимании составления таких запросов
идем по шагам
select * from magazin, otzyv where magazin.id = otzyv.magaz_id
так как поле magaz_id уникально для двух таблиц можно упростить
select * from magazin, otzyv where magazin.id = magaz_id
В результате не будет информации о магазинах без отзывов. Но мы строим топ поэтому нам подойдет
решим что будет в результате
select magazin.name, count(*) as ocnt ... group by magaz_id order by ocnt
Если нужны нулевки то вместо неявного left join из первого запроса
пропишите соединение в явном виде
select ... from magazin left outer join otzyv on magazin.id = magaz_id
- Большое спасибо за ваши разъяснения по шагам
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы создать запрос на вывод данных по количеству отзывов, вам необходимо использовать оператор SQL ORDER BY в сочетании с функцией COUNT().
Пример запроса на языке SQL для вывода данных по количеству отзывов может выглядеть следующим образом:
SELECT product_id, COUNT(review_id) AS total_reviews FROM reviews GROUP BY product_id ORDER BY total_reviews DESC;
В данном запросе мы выбираем идентификатор продукта (product_id) и используем функцию COUNT() для подсчета количества отзывов (review_id) для каждого продукта. Затем мы группируем результаты по идентификатору продукта с помощью оператора GROUP BY. Наконец, мы сортируем результаты в порядке убывания количества отзывов с помощью оператора ORDER BY и ключевого слова DESC.
Таким образом, данный запрос позволит вам получить данные по количеству отзывов для каждого продукта и отсортировать их в порядке убывания. Не забудьте заменить "reviews" на название вашей таблицы с отзывами и "product_id" на соответствующие поля в вашей базе данных.