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