首页 > 解决方案 > SQL 数据库 – 跟踪用户的活动

问题描述

我有一个简单的数据库结构,带有模型和关系:

楷模:

  1. 用户
  2. 团体
  3. 活动

关系:

  1. User/Group –> 用户属于Group,Group有很多User
  2. User/Activity –> User有很多Activity,Acitivty属于User
  3. Group/Activity –> Activity属于Group,Group有很多Activity

我的问题 - 我希望能够跟踪用户在给定时间段内(可能每周,但可能每天)在组中执行的活动数量,我不知道实现这一目标的最佳/最高效的方法是什么。

从理论上讲,我可以只执行一个查询,根据created_at日期属性计算这些活动,但我认为这不是最高效的方式(我错了吗?)

有谁知道如何正确构建这样的东西?

标签: sqldatabase

解决方案


根据您提供的关系,您的activity表有一个外键引用user_idand group_id,您可以获取一天内某个组下的用户活动计数。

SELECT a.user_id, a.group_id, count(a.user_id)
FROM activity a 
WHERE a.user_id = '123'
AND a.group_id = '1'
AND a.activity_time >= '2019-08-31'
AND a.activity_time < '2019-08-31' + INTERVAL 1 DAY

user_id, group_id, activity_time如果将来表大小增加,请创建一个复合键以更快地检索。

请注意,此查询位于MySQL.


推荐阅读