Задать вопрос
@apptimeru

Как правильно составить сложный запрос из двух таблиц с сортировкой?

Здравствуйте уважаемые эксперты, не могу решить данную головоломку уже месяц, пробовал разные варианты, однако все работает не совсем как надо.

Есть вот такой запрос:

SELECT g.id, g.title, g.image, s.price, COUNT(s.id) as cnt, SUM(s.orders) as summ FROM store s
LEFT OUTER JOIN games g ON g.id = s.item_id
WHERE g.status = 'publish' AND s.status_item = 'publish' GROUP BY g.id ORDER BY s.id DESC LIMIT 15


Таблица store отвечает за товары, и содержит такие важные поля в этом запросе как orders (количество заказов этого товара), id (для подсчета количества товаров для конкретной игры) и item_id это внешний ключ для соединения с таблицей games.

Таблица games - это таблица с описанием игры, с заголовком, картинкой и другой мета информацией.

Необходимо достать последние игры (последние на основе добавления товаров s.id DESC), и вывести информацию для каждой игры, а именно количество заказов по этой игре и минимальная сумма товара для этой игры. В целом запрос выше справляется с задачей, однако не вытаскивает самую дешевую цену, а достает первую добавленную по ID. Можно было бы добавить MIN(s.price) и тогда он достает что надо, однако так он достает только минимальную цену, но все остальные данные из таблицы store достает не верно (типо цену берет самую низкую, а все остальные данные, такие как есть ли скидка, и другая информация, все равно сортируются по ID).

Абстрактный пример 2х таблиц и необходимый результат:
6553651b89141861627372.png
  • Вопрос задан
  • 257 просмотров
Подписаться 2 Простой 3 комментария
Решения вопроса 1
Snakecharmer
@Snakecharmer
Широкопрофильный менеджер и аналитик
Попробуйте например так (но лучше выложите примеры таблиц и данных на fiddle):

SELECT g.id, g.title, g.image, s.price, cnt, summ
FROM games g
LEFT JOIN (
SELECT item_id, MIN(price) as min_price, COUNT(id) as cnt, SUM(orders) as summ
FROM store
WHERE status_item = 'publish'
GROUP BY item_id
) s ON g.id = s.item_id
WHERE g.status = 'publish'
ORDER BY g.id DESC
LIMIT 15

Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@basili4-1982
надо несколько раз джойний таблицу с инфой о игре минимальная цена 1 джойн. 2 инфа о игре другой
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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