Первые N в группе с несколькими объединениями таблиц

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

7
задан RichardTheKiwi 16 March 2011 в 00:40
поделиться