2016-04-28 43 views
1

我有一個屏幕,看起來非常像Facebook時間軸Mysql的跟蹤用戶訪問量爲每個帖子在timelime

用戶可以查看其他用戶等職位

讓這些帖子中,我這樣做

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

現在我需要收集的數據是「誰看到這篇文章」。

是否有任何優雅的方式來做到這一點?

現在所有我能想到的是我每次抓取帖子。我遍歷它們,然後收集查詢返回崗位的所有ID,然後在另一臺

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

推然後當我取的帖子下一次我能做到的user_viewscount

select *,count(user_views.id) from posts join user_views on post_id = post.id 

但是這聽起來像一個大量的工作,每個VIEW,特別是最有可能用戶將看到一個最多次,

是有這樣的需要的任何已知的模式?

回答

0

這是一個設計問題,答案真的取決於您的需求。

如果您想確切地知道是誰查看了什麼帖子和多少次,那麼您需要收集用戶 - 帖子級別的數據。

但是,您可能會認爲您並不在乎誰查看了多少次帖子,您只是想知道帖子被查看了多少次。在這種情況下,您可能只有一個包含帖子ID和查看次數字段的表格,並且您每次查看帖子時都會增加查看次數。

很明顯,您可以應用混合方法並擁有詳細的用戶 - 發佈表(可能甚至包含時間戳)具有包含發佈ID和查看計數字段的聚合表。詳細表格可用於更詳細地分析用戶的行爲,或向他們展示他們自己活動的軌跡,而您的aggretage表格可用於快速獲取帖子的總體查看次數。聚合表可以通過觸發器進行更新。