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

SQL数据库–跟踪用户的活动,sql,database,Sql,Database,我有一个简单的数据库结构,包括模型和关系: 型号: 使用者 组 活动 关系: 用户/组–>用户属于组,组中有许多用户 用户/活动–>用户有许多活动,活动属于用户 组/活动–>活动属于组,组有许多活动 我的问题–我希望能够跟踪用户在给定时间段内(可能是每周,但可能是每天)在组中执行的活动数量,我不知道实现这一点的最佳/最有效的方法是什么 理论上,我可以执行一个查询,根据created_at date属性对这些活动进行计数,但我认为这不是最有效的方法,我错了吗 有人知道如何正确构造这样的内容吗?根据

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

型号:

使用者 组 活动 关系:

用户/组–>用户属于组,组中有许多用户 用户/活动–>用户有许多活动,活动属于用户 组/活动–>活动属于组,组有许多活动 我的问题–我希望能够跟踪用户在给定时间段内(可能是每周,但可能是每天)在组中执行的活动数量,我不知道实现这一点的最佳/最有效的方法是什么

理论上,我可以执行一个查询,根据created_at date属性对这些活动进行计数,但我认为这不是最有效的方法,我错了吗


有人知道如何正确构造这样的内容吗?

根据您提供的关系,您的活动表有一个指向用户id和组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
在用户id、组id和活动时间上创建一个复合键,以便在将来表大小增加时更快地检索


请注意,此查询是在MySQL中。

根据您提供的关系,您的活动表有一个指向用户id和组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
在用户id、组id和活动时间上创建一个复合键,以便在将来表大小增加时更快地检索


请注意,此查询在MySQL中。

您的要求不清楚。您是否希望特定用户在一天或一周内在每个组中执行的活动总数?具有预期输出的示例数据集将帮助您获得解决方案。@Samir Yes!我正在编写的后端对用户的活动施加了限制,例如,用户每周只能发布7次或每天在组中发布一次。我将在应用程序代码中实施此规则,而不是在数据库元数据中。正如您所说,根据创建的_at datetime属性对其进行计数。当然,在userid&created\u列上放置一个索引。除非你的网站发展到一个非常大的规模,否则它可能会有令人满意的性能,如果它这样做了,你无论如何都必须重新设计一切。@Ancinek。我删除了不一致的数据库标记。请仅使用您真正使用的数据库进行标记。样本数据和期望的结果将非常有用。您的要求不清楚。您是否希望特定用户在一天或一周内在每个组中执行的活动总数?具有预期输出的示例数据集将帮助您获得解决方案。@Samir Yes!我正在编写的后端对用户的活动施加了限制,例如,用户每周只能发布7次或每天在组中发布一次。我将在应用程序代码中实施此规则,而不是在数据库元数据中。正如您所说,根据创建的_at datetime属性对其进行计数。当然,在userid&created\u列上放置一个索引。除非你的网站发展到一个非常大的规模,否则它可能会有令人满意的性能,如果它这样做了,你无论如何都必须重新设计一切。@Ancinek。我删除了不一致的数据库标记。请仅使用您真正使用的数据库进行标记。样本数据和期望的结果将非常有用。