0

假设我有一个 MySQL 表 order_items (idorder, iitem, 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项目。

Mahout 和 MySQL 有一个很好的示例,您可以在 github 上自己尝试:https ://github.com/jasebell/RecommenderDemo ,它看起来就像您想要的那样。

于 2013-08-26T10:56:16.297 回答