Web ショップから注文したアイテムを含む MySQL テーブル order_items (idorder、iditem、amount) があるとします。注文 X に類似した注文を、同様の商品を同様の金額で含む他の注文を検索することで見つけたいと考えています。
これが私の現在のアプローチです:
SELECT SQL_CALC_FOUND_ROWS
SUM(GREATEST(1, LEAST(cown.amount, cother.amount))) hits,
cother.`idorder`
FROM order_items cown
LEFT JOIN order_items cother ON (
cother.`idorder` != 1
AND cown.iditem = cother.iditem
)
WHERE cown.`idorder` = 1 AND cother.idorder IS NOT NULL
GROUP BY cother.idorder ASC
ORDER BY hits DESC
これにより、特定の注文からすべてのアイテムが選択され、他の注文のアイテムと左結合されます。次に、他の注文 ID でグループ化し、それらの間の重複の量を合計します。
これを行うより効率的な方法はありますか?