2013-08-26 46 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