我正在尝试编写一种算法,其作用有点像亚马逊的“购买此产品的人也购买了”。
两者之间的区别在于,我的只是计算您在单个会话中观看的“产品”,而亚马逊则计算每次购买/结账。
我在实施和弄清楚算法应该是什么方面遇到了一些困难。
- 到目前为止,我正在通过 SessionID 来计算观看过的产品 ID。
- 一天结束时,我有许多 ProductID 被许多 SessionID 监视。
- 现在,我需要在数据库中创建某种派系。也就是说,逐一查看 SessionID 并提取他们查看过的所有产品。然后,将其作为一个集团写入数据库表中。
- 一旦我有了派系,并且正在查看产品,我就会扫描此表以查看它所在的派系,然后提取所有其余的产品 ID。
如果我的算法是正确的,您有什么参考/想法吗?还有更好的吗?
我能够使用简单的数据库结构和非常简单的查询来实现您想要的结果:
Table
TABLE `exa`
| sesh_id | prod_id |
---------------------
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | 2 |
| 2 | 3 |
| 2 | 4 |
| 3 | 3 |
| 3 | 4 |
| 4 | 1 |
| 4 | 2 |
| 4 | 5 |
Query
SELECT c.prod_id, COUNT(*)
FROM `exa` a
JOIN `exa` b ON a.prod_id=b.prod_id
JOIN `exa` c ON b.sesh_id=c.sesh_id
WHERE a.`prod_id`=3 AND c.prod_id!=3
GROUP BY c.prod_id
ORDER BY 2 DESC;
Result
| prod_id | COUNT |
| 4 | 9 |
| 2 | 6 |
| 1 | 3 |
这个想法是,每次会话查看产品时,它都会被插入到表中[在本例中exa
]
然后,在任何特定的产品视图中,您可以检查查看该产品的用户还查看了哪些其他产品(按频率加权)。因此,在这个特定的示例中,查看产品 #3 的每个人都查看了产品 #4,因此它在排序中排在第一位。
产品 #5 仅被会话 #4 查看,而会话 #4 没有查看产品 #3,因此产品 #5 不会出现在结果中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)