2017-11-06 7 views
0

複数の行を持つ2つのテーブルがあります。最初はcommentsと呼ばれ、次の構造を有する。ユーザーが最後にコメントしてからの日数を表示します

user_id last_commented 
........................ 
9239289 2017-11-06 
4239245 2017-11-05 
4239245 2017-11-03 
6239223 2017-11-02 
1123139 2017-11-04 

秒1がusersと呼ばれ、以下の構造を有するされています

user_id user_name user_status 
................................. 
9239289 First Name 0 
4239245 First Name2 2 
6239223 First Name3 1 
1123139 First Name4 2 

を私がコメントを追加していないユーザーを表示するクエリを必要とします最後の3日間はuser_statusが2になり、最後にコメントしてからの日数が表示されます。正しく、最後の3日間コメントしていないユーザーを出力

select u.* 
from users u 
where not exists (
    select 1 
    from comments c 
    where c.user_id = u.user_id and last_commented > DATE(NOW()) - INTERVAL 3 DAY 
) and user_status = 2 

これは、これまでのところ、私のクエリがあります。最後にコメントした日数を表示するように変更するにはどうすればよいですか?あなたが最後のコメント以降の日数が必要な場合は

答えて

3

、あなたはいくつかの種類の、joinが必要になります。

select u.*, datediff(curdate(), last_commented) 
from users u left join 
    comments c 
    on c.user_id = u.user_id 
where u.status = 2 
group by u.user_id 
having max(last_commented) < curdate() - interval 3 day or 
     max(last_commented) is null; 

このバージョンでは、すべてではコメントしていないユーザーを含んでいます。

関連する問題