首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询可以将time+user数据汇总到time x用户报告中吗?

MySQL查询可以将time+user数据汇总到time x用户报告中吗?
EN

Stack Overflow用户
提问于 2013-03-08 06:49:10
回答 1查看 306关注 0票数 1

我有一个记录用户活动的MySQL表,其模式如下:

代码语言:javascript
复制
TABLE Activity:
id      INT AUTOINCREMENT  // the primary key
ts      TIMESTAMP          // similar to DATETIME
user    INT                // a unique ID for each user
action  INT                // action code 

用户每次执行操作时,都会在此表中添加一行。我现在要做的是生成一份报告,汇总每天的用户活动总量。例如,它看起来像这样:

代码语言:javascript
复制
Date       | User 1 | User 2 | User 3
--------------------------------------
2013-03-05 |     12 |     34 |     56
2013-03-06 |     78 |     87 |     65
2013-03-07 |     43 |     21 |     12

在这个示例中,用户1在3月6日执行了78个操作,在3月7日执行了43个操作,用户3在3月5日执行了56个操作。在这一点上,我不关心在特定的一天完成了什么类型的操作,只关心特定用户完成的所有操作的总数。

现在,编写一个MySQL查询将activity表中的条目汇总为单个用户的天数是相对简单的,我可以依次为每个用户运行这样的查询(尽管每个结果集中的days列可能不会完全对齐)。有没有一种方法可以在一个查询中自动为所有用户执行此操作?

我认为这可能有点奇怪,因为结果中的列数可能会根据感兴趣的日期范围内的活动用户的数量而变化。换句话说,报表中的列数可能少于数据库中的用户数。

本质上,我不是让MySQL生成一个一维数组的记录作为其输出,而是希望它生成一个二维数组的值,其中行和列的标签都是从活动表派生的。这有可能吗?

我想我总是可以遍历表中的原始数据并自己构建一个合适的二维数组(我将在PHP中工作),但我想知道MySQL是否可以为我做这件事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 07:06:16

旋转(你正在尝试做的事情的专业术语)通常不值得麻烦。如果您只需要获取几个用户的数据,这是可以的,但是如果您需要能够获取用户的动态列表的数据,那么您最好执行按tsuser分组的单个查询,如下所示

代码语言:javascript
复制
SELECT DATE(`ts`) AS `Date`, `User`, COUNT(*) AS `Actions`
FROM `Activity`
#WHERE (conditions)
GROUP BY `Date`, `User`

在PHP中创建一个多维数组,如下所示:

代码语言:javascript
复制
$result; // result from DB call as an array of objects
$user_actions = array();
foreach($result as $row){
    $user_actions[$row->Date][$row->User] = $row->Actions;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15283327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档