Mysql在timelime中跟踪每个帖子的用户视图

时间:2016-04-28 09:57:43

标签: php mysql

我的屏幕看起来非常像facebook时间线

用户可以查看其他用户的帖子等。

获取这些帖子我做的事情就像

select user.id,user.name,posts.title,posts.body from posts left join users;

现在需要收集的数据是"谁看过这篇文章"

有没有优雅的方法呢?

现在我所能想到的就是每次我都会发帖子。我循环遍历它们,然后收集查询返回的所有帖子,然后推入另一个表

user_views [pk:user_id+postId]
userId,postId 
 1    , 1

然后,当我下次可以count user_views select *,count(user_views.id) from posts join user_views on post_id = post.id 时提取帖子时。

VIEW

但这听起来像每个SELECT sum(dc.nbrDefaut) def, a.nb control,c.id_of FROM controlequalite c ,detailscontrole dc, (select sum(nbreControlle) nb, id_monitrice from controlequalite group by id_monitrice) a where c.id = dc.id_controle and c.id_monitrice = a.id_monitrice and c.date >= '2016-03-25 00:00:00' group by c.id_monitrice,c.id_of; 的工作量很大,特别是最有可能的用户会看到多次,

是否存在这种需求的已知模式?

1 个答案:

答案 0 :(得分:0)

这是一个设计问题,答案实际上取决于您的需求。

如果您想确切地知道谁查看了哪些帖子和多少次,那么您需要在用户 - 帖子级别收集数据。

但是,您可能会认为您并不真正关心谁查看了哪些帖子多少次,您只想知道帖子被查看了多少次。在这种情况下,您可能只有一个包含帖子ID和视图计数字段的表,并且您只需在每次查看帖子时增加视图计数。

显然,您可以应用混合方法并拥有详细的用户 - 帖子表(甚至可能带有时间戳)具有包含帖子ID和视图计数字段的聚合表。详细表格可用于更详细地分析用户的行为,或向他们显示他们自己的活动的跟踪,而您的aggretage表可用于快速获取帖子的整体视图计数。聚合表可以通过触发器更新。