ユーザーアクティビティを記録する次のスキーマを持つ 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
ユーザーがアクションを実行するたびに、このテーブルに行が追加されます。ここでやりたいことは、1 日あたりの合計ユーザー アクティビティを要約したレポートを生成することです。たとえば、次のようになります。
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 回のアクションを実行しました。特定のユーザーによって実行されたすべてのアクションの合計数。
アクティビティ テーブルのエントリを 1 人のユーザーの日数に要約する MySQL クエリを作成するのは比較的簡単で、このようなクエリをユーザーごとに順番に実行できます (ただし、各結果セットの日数列は完全に一致しない場合があります)。1 つのクエリですべてのユーザーに対して自動的にこれを行う方法はありますか?
結果の列の数は、関心のある日付範囲でアクティブだったユーザーの数によって異なる可能性があるため、これは少し奇妙かもしれません. つまり、レポート内の列の数は、データベース内のユーザー数よりも少ない場合があります。
基本的に、MySQL に出力としてレコードの 1 次元配列を生成させるのではなく、値の 2 次元配列を生成させたいと考えています。ここで、行と列のラベルはアクティビティ テーブルから派生します。これは可能ですか?
テーブル内の生データを調べて、自分で適切な 2 次元配列を構築することはいつでもできると思いますが (私は PHP で作業します)、MySQL でそれができるかどうか疑問に思いました。