2013-08-26 43 views
0

假設我有一個MySQL表order_items(idorder,iditem,amount),其中包含人們從網上商店訂購的項目。我想通過查找類似數量的類似項目的其他訂單來查找類似於訂單X的訂單。查找列表之間重疊的高效SQL查詢

這是我目前的做法:

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進行分組並總結它們之間的重疊量。

有沒有更有效的方法來做到這一點?

回答

0

它看起來像你需要一個推薦引擎。這將是棘手的實現在普通的SQL和不知道如何可靠。初學者可以查看Apache Mahout項目。

有一個Mahout和MySQL的好例子,你可以在github上自己嘗試:https://github.com/jasebell/RecommenderDemo,它看起來像你想要的東西。

+0

這看起來很有趣,但它似乎對我的目的可能有點矯枉過正。我也需要在PHP中運行這個。 – Nils

+0

然後,這可能會有所幫助:http://api.shephertz.com/cloudapidocs/guide/0.8.1.1/php/recommendation_api.html – Kris