0

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 でグループ化し、それらの間の重複の量を合計します。

これを行うより効率的な方法はありますか?

4

1 に答える 1

0

レコメンデーション エンジンが必要なようです。それはプレーンなSQLで実装するのが難しく、信頼性が不明です. 手始めに、Apache Mahoutプロジェクトを調べてください。

github ( https://github.com/jasebell/RecommenderDemo ) で自分で試すことができる Mahout と MySQL の良い例があります。

于 2013-08-26T10:56:16.297 に答える