高效的SQL查询,以查找列表之间的重叠

时间:2013-08-26 10:35:52

标签: mysql

假设我有一个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分组,并总结它们之间的重叠量。

有更有效的方法吗?

1 个答案:

答案 0 :(得分:0)

看起来你需要一个推荐引擎。在普通的sql中实现并且不确定多么可靠是很棘手的。首先,我们来看看Apache Mahout项目。

你可以在github上找到Mahout和MySQL的一个很好的例子:https://github.com/jasebell/RecommenderDemo它看起来就像你想要的那样。