Как создать запрос на вывод по количеству отзывов?

Ссылка скопирована
1 ответ

Помогите составить запрос 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() - так и решите задачу.

  • alexalexes, проблема как раз в том, что я перешел и пытался это реализовать попутно копаясь на различных сайтах в поисках подобных решений...в итоге получилась каша в которой я запутался...поэтому не стал писать свои "наработки" дабы не запутать других
  • Ну, давайте по порядку.
    В таблице 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

    • Большое спасибо за ваши разъяснения по шагам
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Андрей PHP Ответ

    Для того чтобы создать запрос на вывод данных по количеству отзывов, вам необходимо использовать оператор 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;

    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" на соответствующие поля в вашей базе данных.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно