Судя по моим исследованиям, это очень распространенная проблема, которая обычно имеет довольно простое решение.Моя задача - изменить несколько запросов из получить все результаты в получить топ-3 в группе .Сначала все шло хорошо, и я использовал для этого несколько рекомендаций и ответов с этого сайта (Самые популярные продукты).Тем не менее, я столкнулся с трудностями с моим последним "бестселлером" из-за нескольких объединений.
По сути, мне нужно привести все продукты в порядок на # самых высоких продаж на продукт, при котором максимальное количество продуктов на одного поставщика составляет 3 У меня есть несколько таблиц, соединенных для создания исходного запросаи каждый раз, когда я пытаюсь использовать переменные для генерации рейтинга, это приводит к неверным результатам.Следующее должно помочь лучше понять проблему (я удалил ненужные поля для краткости):
Таблица продуктов
productid | vendorid | approved | active | deleted
Таблица поставщиков
vendorid | approved | active | deleted
Таблица заказов
orderid | `status` | deleted
Таблица элементов заказа
orderitemid | orderid | productid | price
Теперь мой исходный запрос к получить все результаты выглядит следующим образом:
SELECT COUNT(oi.price) AS `NumSales`,
p.productid,
p.vendorid
FROM products p
INNER JOIN vendors v ON (p.vendorid = v.vendorid)
INNER JOIN orders_items oi ON (p.productid = oi.productid)
INNER JOIN orders o ON (oi.orderid = o.orderid)
WHERE (p.Approved = 1 AND p.Active = 1 AND p.Deleted = 0)
AND (v.Approved = 1 AND v.Active = 1 AND v.Deleted = 0)
AND o.`Status` = 'SETTLED'
AND o.Deleted = 0
GROUP BY oi.productid
ORDER BY COUNT(oi.price) DESC
LIMIT 100;
Наконец,(и вот где я в тупике), я пытаюсь изменить вышеприведенное утверждение так, чтобы я получал только 3 лучших продукта (по # проданным) на одного поставщика.Я бы добавил то, что у меня есть, но мне стыдно, и этот вопрос уже является стеной текста.Я пробовал переменные, но продолжаю получать неверные результаты.Любая помощь будет принята с благодарностью.