@Bronaz777

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

Помогите составить запрос 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


Как я понимаю нужно сделать подзапрос с COUNT и JOIN но никак не получается у меня
  • Вопрос задан
  • 143 просмотра
Решения вопроса 2
Immortal_pony
@Immortal_pony
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 Я бы крайне не рекомендовал использовать транслитерированный русский в названии полей никогда.
Ответ написан
402d
@402d
начинал с бейсика на УКНЦ в 1988
идем по шагам

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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы