SQL数据库–跟踪用户的活动

时间:2019-08-31 15:21:22

标签: sql database

我有一个简单的数据库结构,其中包含模型和关系:

型号:

  1. 用户
  2. 活动

关系:

  1. 用户/组–>用户属于组,组有很多用户
  2. 用户/活动–>用户有许多活动,活动属于用户
  3. 组/活动–>活动属于组,组有许多活动

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

从理论上讲,我只可以基于created_at日期属性执行一个查询,以对那些活动进行计数,但是我认为这不是最有效的方式(我错了吗?)

有人知道如何正确构造这样的东西吗?

1 个答案:

答案 0 :(得分:2)

根据您提供的关系,您的activity表具有对user_idgroup_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中。