我的网站会在用户查看文章时记录对数据库的点击。此表每3天自动清除一次。我们使用这些数据计算出3天内观看次数最多的页面。
我还想将这些数据用于营销目的,例如,确定哪些用户喜欢网站的哪些部分。
我在php中编写了一个执行以下操作的脚本:
获取过去3天内查看过文章的任何已登录成员的用户ID
对于每个用户,我查询计算他们在每个部分中查看文章的次数,例如,Bobby在Food&在运动中喝6页。我尝试将这一步骤与前一步骤结合在一起,但总结果得到了奇怪的结果。
这给了我一个很好的数组:
[Bobby Jones] =>排列 ( [电影] => 10 [主页] => 1 [食品与食品喝] => 2 [健康&美女] => 1 [礼物&小工具] => 3 )
我想从这个数据中得到的是最终有一个表来记录上面数组中的数据,然后当我运行我的查询时,递增它。
不幸的是,这增加了很多开销。当我有像上面那样的数组时,我必须运行另一个查询来检查数据库中是否已存在用户和类别的组合,如果存在,我必须按当天的值递增它。例如,如果Bobby上周观看了10个电影页面,而本周观看了6个,我需要更新表格。如果他之前从未查看过Food页面,我需要插入。
此查询返回400个左右在过去3天内与该网站进行过互动的用户。这意味着对于每个I用户,我必须进行1次查询以获取他们的浏览总数,1次查询以查看他们之前是否已经浏览过该类别,以及另一次更新/插入查询,具体取决于他们是否浏览过它或不。你可以看出这是多么低效。
有人能建议更好的方法吗?我的最终目标是最终得到一个表格,向我显示我的用户浏览我的类别的频率,因此我可以说“向我展示所有喜欢食物和饮料的用户”等。
谢谢, 马特
答案 0 :(得分:1)
您可以使用MySQL INSERT...ON DUPLICATE KEY UPDATE
完成UPDATE / INSERT行为。
您可以使用MySQL的INSERT...SELECT
组合SELECT和INSERT查询。
如果您发布更多详细信息(例如,模式),我可以向您展示一个结合这两种技术的示例查询,尽管MySQL手册对这两个主题都非常深入。
答案 1 :(得分:1)
如果您使用的是MySQL并且版本足够高,请查看INSERT ... ON DUPLICATE KEY UPDATE。这应该减少查询。
然后确保您的表格正确键入,这两个查询应该是轻而易举的。