sql - SQL 数据库 – 跟踪用户的活动
问题描述
我有一个简单的数据库结构,带有模型和关系:
楷模:
- 用户
- 团体
- 活动
关系:
- User/Group –> 用户属于Group,Group有很多User
- User/Activity –> User有很多Activity,Acitivty属于User
- Group/Activity –> Activity属于Group,Group有很多Activity
我的问题 - 我希望能够跟踪用户在给定时间段内(可能每周,但可能每天)在组中执行的活动数量,我不知道实现这一目标的最佳/最高效的方法是什么。
从理论上讲,我可以只执行一个查询,根据created_at
日期属性计算这些活动,但我认为这不是最高效的方式(我错了吗?)
有谁知道如何正确构建这样的东西?
解决方案
根据您提供的关系,您的activity
表有一个外键引用user_id
and 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
.
推荐阅读
- xpath - 如何使用 xpath/scrapy 根据 id 标签选择两个特定项目之间的所有项目
- java - Spring Batch - Spring Batch Retry 和 backoffPolicy 不起作用
- lua - 我的“模块事件”是很多加载参数
- django - 无法在 django 中访问上传的媒体文件
- mongodb - 基本身份验证应该在邮递员中响应 500(授权),但 401 Unathorized 可以正常工作。使用 ktor intellij mongodb
- sql - 在 SQL 查询中检索属性时遇到问题
- flutter - 如何访问 Flutter 中与其他 Widget 关联的变量?
- ios - 无法从 UIScrollViewDelegate 覆盖 scrollViewDidScroll
- javascript - 使用 Injected Token 配置延迟加载的模块
- node.js - 节点 postgres 应用程序在本地运行,但在生产中请求超时