Судя по моим исследованиям, это очень распространенная проблема, которая обычно имеет довольно простое решение. Моя задача - изменить несколько запросов из , получить все результаты в , получить 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 лучших продукта (по # проданному) от каждого поставщика. Я бы добавил то, что у меня есть, но мне неловко это делать, и этот вопрос уже представляет собой стену текста. Я пробовал переменные, но получаю неверные результаты. Любая помощь будет принята с благодарностью.