SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...

Верен\оптимален ли sql запрос?

Запрос должен возвращать 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труктуру таблиц, увы, изменить не могу и составлял её тоже не я.
  • Вопрос задан
  • 204 просмотра
Пригласить эксперта
Ответы на вопрос 2
swanrnd
@swanrnd
Издатель HTML5 игр
Посмотрите лучше время выполнения, если устроит, то все ок.
Все равно структуру таблиц поменять не сможете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы