我的屏幕看起来非常像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;
的工作量很大,特别是最有可能的用户会看到多次,
是否存在这种需求的已知模式?
答案 0 :(得分:0)
这是一个设计问题,答案实际上取决于您的需求。
如果您想确切地知道谁查看了哪些帖子和多少次,那么您需要在用户 - 帖子级别收集数据。
但是,您可能会认为您并不真正关心谁查看了哪些帖子多少次,您只想知道帖子被查看了多少次。在这种情况下,您可能只有一个包含帖子ID和视图计数字段的表,并且您只需在每次查看帖子时增加视图计数。
显然,您可以应用混合方法并拥有详细的用户 - 帖子表(甚至可能带有时间戳)和具有包含帖子ID和视图计数字段的聚合表。详细表格可用于更详细地分析用户的行为,或向他们显示他们自己的活动的跟踪,而您的aggretage表可用于快速获取帖子的整体视图计数。聚合表可以通过触发器更新。