我有一个 MySQL 表,它具有以下记录用户活动的模式:
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
每次用户执行操作时,都会在此表中添加一行。我现在要做的是生成一份总结每天总用户活动的报告。例如,它看起来像这样:
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 查询将活动表中的条目汇总为单个用户的天数相对简单,我可以依次为每个用户运行这样的查询(尽管每个结果集中的天数列可能不会完全对齐)。有没有办法在一个查询中自动为所有用户执行此操作?
我认为这可能有点奇怪,因为结果中的列数可能会根据感兴趣的日期范围内有多少用户处于活动状态而有所不同。换句话说,报表中的列数可能少于数据库中的用户数。
本质上,与其让 MySQL 生成一维记录数组作为其输出,我希望它生成一个二维值数组,其中行和列的标签来自活动表。这甚至可能吗?
我想我总是可以浏览表中的原始数据并自己构建一个适当的二维数组(我将使用 PHP),但我想知道 MySQL 是否可以为我做这件事。