2017-11-06 7 views
0

複数の行を持つ2つのテーブルがあります。最初はcommentsと呼ばれ、次の構造を有する。3日間コメントを追加していないユーザーのIDのみを表示

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

に等しいです

答えて

1

たとえば、あなたはNOT EXISTS

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 

EDITを使用することができます。

select u.*, datediff(DATE(now()), comment.last_commented) 
from users u 
join (
    select user_id, max(last_commented) last_commented 
    from comments 
    group by user_id 
) comment on comment.user_id = u.user_id 
where last_commented <= DATE(NOW()) - INTERVAL 3 DAY 
:あなたは、結果の最後のユーザのログイン以来の日数をしたいならば、あなたは、次のアプローチを使用することができます

このアプローチでは、サブクエリを使用して最後のコメントの日付を検索し、それをフィルタリングおよび計算に使用します。

+0

完全に機能しました。どうもありがとう! –

+0

最後にコメントした日数を表示できる方法はありますか? –

+1

@DimitarArabadzhiyskiあなたはそれを解決するためにサブクエリを書くことができます、私は試してみます –

0

このクエリを使用できます。

SELECT MAX(last_commented) lastdate,user_id 
    FROM `comments` 
where lastdate<DATE_SUB(NOW(), INTERVAL 3 day) and 
user_status = 2 

    GROUP BY user_id 
関連する問題