假设我有一个 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 分组并总结它们之间的重叠量。
有没有更有效的方法来做到这一点?