Php 创建一个';看过这个的人也看过';列表

Php 创建一个';看过这个的人也看过';列表,php,mysql,database,database-design,codeigniter,Php,Mysql,Database,Database Design,Codeigniter,我正在考虑创建一个“浏览者也浏览”列表,你可以在亚马逊、yelp和其他在线网站上看到。现在,我正在考虑创建一个新表,其中包含“product\u id”、“last\u viewed\u product\u id”、“hits”,当用户从product\u id=100的页面转到product\u id=101时,它将使用product\u id=101、last\u viewed\u product\u id=100创建/更新此表,并增加“hits”值。有没有更好的方法更优化、计算量更小?看来

我正在考虑创建一个“浏览者也浏览”列表,你可以在亚马逊、yelp和其他在线网站上看到。现在,我正在考虑创建一个新表,其中包含“product\u id”、“last\u viewed\u product\u id”、“hits”,当用户从product\u id=100的页面转到product\u id=101时,它将使用product\u id=101、last\u viewed\u product\u id=100创建/更新此表,并增加“hits”值。有没有更好的方法更优化、计算量更小?

看来你走的是正确的道路——一些建议-

对于计算密集型-您可能希望缓存您的结果,因此您只会给出一个每天更新一次或类似效果的顶部“x”数字。在这种情况下,实时性似乎并不重要

我不确定你的网站上有什么样的产品,但如果种类繁多,你可能只想把有相关信息的项目显示出来(因此星球大战只会弹出与星球大战相关的项目)

因此,如果你的产品有“标签”或关键词,你可能希望与之建立关系


您可能还想根据他们如何获得产品来确定权重。如果他们通过单击您提供的列表来访问该产品,那么这些类型的项目将继续填充,而不会给其他产品一个显示的机会,所以请给它一个较低的权重。较重的项目将弹出。

如果您有所有访问者的用户id(您可以为未注册的用户创建临时id),您可以创建一个包含user_id和product_id列的历史记录表,其中存储了用户访问过的所有产品。然后,当用户打开产品时,执行一个查询,搜索最近查看过该产品的用户ID,然后将其加入到用户打开的产品中。然后,只需对那些用户ID打开最多的产品进行排序


确保缓存此数据,因为连接会减慢任何SQL server的运行速度。

据我所知,Amazon用来降低计算强度的“技巧”是a)使用贝叶斯统计/平均值和b)计算部分聚合。后者允许您不需要计算所有内容(您可以对预先计算的聚合进行求和)。前者允许您注入您推断的相关材料。

我很确定Amazon会使用它

开创性论文:

快速算法(FP-Growth):

还没有看到PHP库,但是有Java、Python的