1

私はテーブルを持ってusersおりposts、さまざまな期間のユーザーによる投稿の数を取得したいと思います。

users: id, username
1, bob
2, sam

posts: id, user_id, created (datetime)
1, 1, 2012-12-01 00:00:00
2, 1, 2012-12-30 00:01:00
3, 1, 2012-12-30 01:00:00
4, 2, 2012-12-12 00:00:00
5, 2, 2012-12-30 01:00:00

hour過去とday月の投稿を数えたいです。これは1つのクエリで実行できますか?

クエリが実行された日付2012-12-30 01:30:00を次のようにするとします。

User.id | hour | day | month
1       | 1    | 2   | 3
2       | 1    | 1   | 2

私は次のようなことを試みましたが、数字が間違っています。

SELECT 
    User.id, 
    COUNT(Hour.id) as hour, 
    COUNT(Day.id) as day, 
    COUNT(Month.id) as month
FROM user as User
LEFT JOIN posts as Hour ON 
    (posts.user_id = user.id AND posts.created >= '2012-12-30 00:30:00')
LEFT JOIN posts as Day ON 
    (posts.user_id = user.id AND posts.created >= '2012-12-29 01:30:00')
LEFT JOIN posts as Month ON 
    (posts.user_id = user.id AND posts.created >= '2012-11-30 01:30:00')

私は次のような奇妙な数字になってしまいます

User.id | hour | day | month
1       | 12   | 12  | 12
2       | -    | 2   | 2
4

1 に答える 1

3

あなたはこれを使うことができます:

select
  username,
  user_id,
  sum(created>=date_sub('2012-12-30 01:30:00', INTERVAL 1 HOUR)) hour,
  sum(created>=date_sub('2012-12-30 01:30:00', INTERVAL 1 DAY)) day,
  count(*) month
from users inner join posts on users.id=posts.user_id
where created>=date_sub('2012-12-30 01:30:00', INTERVAL 1 MONTH)
group by user_id

'2012-12-30 01:30:00'(その後、特定の日時をnow())に置き換えることができます

于 2012-12-30T16:59:26.460 に答える