2012-05-02 20 views
1

過去4か月間に毎月何人のユーザーがコンテンツを投稿したかに関する統計情報を取得したいと考えています。私はMySQL UNIONを考えていましたが、それはおそらく重複した行を表示するため、AFAIK UNIONが2つのクエリ結果セットを追加するだけで動作するとは思われません。「毎月コンテンツを投稿したユーザー数」

+-----------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+-----------+------------------+------+-----+---------+----------------+ 
| nid  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| vid  | int(10) unsigned | NO | UNI | 0  |    | 
| type  | varchar(32)  | NO | MUL |   |    | 
| language | varchar(12)  | NO |  |   |    | 
| title  | varchar(255)  | NO | MUL |   |    | 
| uid  | int(11)   | NO | MUL | 0  |    | 
| status | int(11)   | NO | MUL | 1  |    | 
| created | int(11)   | NO | MUL | 0  |    | 
| changed | int(11)   | NO | MUL | 0  |    | 
| comment | int(11)   | NO |  | 0  |    | 
| promote | int(11)   | NO | MUL | 0  |    | 
| sticky | int(11)   | NO |  | 0  |    | 
| tnid  | int(10) unsigned | NO | MUL | 0  |    | 
| translate | int(11)   | NO | MUL | 0  |    | 
+-----------+------------------+------+-----+---------+----------------+ 

そして、提出されたノードがcreatedある時間を保持しているコラム: -

私のテーブルの構造は次のように(Drupalの達人のための通常のDrupalからnodeテーブル)です。

答えて

2

多分そのようなことは、このような何か

select count(distinct(t1.uid)) from node t1 
inner join node t2 on t2.uid = t1.uid and t2.created between date_add(now(), interval -2 month) and date_add(now(), interval -1 month) 
inner join node t3 on t3.uid = t1.uid and t3.created between date_add(now(), interval -3 month) and date_add(now(), interval -2 month) 
inner join node t4 on t4.uid = t1.uid and t4.created between date_add(now(), interval -4 month) and date_add(now(), interval -3 month) 
where t1.created between date_add(now(), interval -1 month) and now() 
+0

はこれに若干の変更をしなければならなかったが、それは動作します。完了までに6分かかって、ほぼサーバーを殺しました:)しかし、ありがとう、それは私が望んでいたものです。 –

+0

「ほぼ殺人」の申し訳ありません;) –

1

(エレガントな...ということを思われませんか)?

select extract(MONTH from create), count(distinct uid) 
from node 
where create >= DATE_ADD(month,-4,CURDATE()) 
group by extract(MONTH from create) 

私はそれをテストしていない...

+0

私はクエリを訂正して実行し、奇妙なものを返します...これは過去4ヶ月のANYのコンテンツを投稿したユーザーの数を返しません過去4ヶ月のうちの1ヶ月ではなく、 –

+0

多分私はあなたの質問を間違ったと思った:私はあなたが毎月4ヶ月のうちのどれか1ヶ月に貢献したユーザーの数ではなく、毎月の統計をしたいと思った... –

+0

私はあなたが過去4ヶ月間に多数のユーザーが毎月コンテンツを提出しています)。あなたが望むなら(ユーザーは過去4ヶ月間毎月のコンテンツを投稿した人数の統計情報)、@Raphaëlの[answer](http://stackoverflow.com/a/10412578/98806)は良く見えます:) –

0
SELECT MONTH(create) as Month, 
     (SELECT COUNT(vid) FROM Table WHERE MONTH(create) = Month) 
FROM Table 
ORDER BY Month DECS 
LIMIT 4 
関連する問題