Запрос должен возвращать 10 самых продаваемых товаров, которые покупают вместе с данным товаром (например, productID = 684).
Товары бывшие в корзине (записи остаются даже после оформления заказа), при добавлении товара в корзину он получает уникальный itemID т.е. таблица содержит productID = 684 с несколькими itemID.
`SC_shopping_cart_items` (
`itemID` int(11) NOT NULL AUTO_INCREMENT,
`productID` int(11) DEFAULT NULL,
PRIMARY KEY (`itemID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Товары в заказах, связь с SC_shopping_cart_items по полю itemID (1:1)
`SC_ordered_carts` (
`itemID` int(11) NOT NULL DEFAULT '0',
`orderID` int(11) NOT NULL DEFAULT '0',
`name` varchar(255) DEFAULT NULL,
`Price` float DEFAULT NULL,
`Quantity` int(11) DEFAULT NULL,
PRIMARY KEY (`itemID`,`orderID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
И собственно сам мой запрос:
SELECT
COUNT(sci.productID) AS cnt,
sci.productID
FROM SC_shopping_cart_items sci
JOIN SC_ordered_carts oc ON oc.itemID = sci.itemID
WHERE sci.productID != 684 AND oc.orderID IN (
SELECT oc.orderID FROM SC_ordered_carts oc
JOIN SC_shopping_cart_items sci ON oc.itemID = sci.itemID
WHERE sci.productID = 684
) GROUP BY sci.productID ORDER BY cnt DESC LIMIT 10
P.S. Cтруктуру таблиц, увы, изменить не могу и составлял её тоже не я.