2010-11-21 12 views
6

私は 'last_login'と呼ばれるdatetime列を持っています。MySQL日付は1か月を超えていますか?

データベースに照会して、前月にログインしていないすべてのレコードを選択したいとします。これはどうすればいいですか?

これは私が現在持っているものです。

$query = $this->query("SELECT u.id, u.name, u.email, u.registered, g.name as group_name FROM `:@users` AS u LEFT JOIN `:@groups` AS g on u.group_id = g.id WHERE u.last_login = ...... LIMIT {$limit_start}, {$limit_end}"); 

:@ =データベースの接頭辞

答えて

18

>がされている必要があります以外

+0

これは正しい – Lamis

+1

どのようにする ">" すべきですか? @JasonSは、先月にシステムにログインしていないすべてのユーザーを探したい。つまり、最終ログイン日は1か月前です。したがって、私たちはlast_loginを持つレコードを1か月前からnow()より前(つまりより小さい)に制限する必要があります。 >を使用すると、前回ログインしたユーザーのみが表示されます。 –

10

あなたはnowと組み合わせるdate_addを使用することができます。

当然
...where u.last_login < date_add(now(), interval -1 month) 

、両方のは、MySQL固有のものとして、 MySQLのバックエンドに制限されます。代わりに、PHPを使って1ヵ月前の日付を知ることができます(私はPHPの人ではありませんが、DateTime::subが助けになると思います)。他の日付/時刻フィールド。

-1

matthewhは、ほとんど正解でした(最初の回答に似ていますが、私の心に、正の整数を使用することがより「自然」である)date_sub

where u.last_login < date_sub(now(), interval 1 month) 

を使用してみてください右のもの

where u.last_login > date_sub(now(), interval 1 month)

+0

あなたは正しいです、> – Lamis

+0

私はそれに同意する必要はありません。>を使用すると、最後のログイン日が1か月前の日付よりも前のユーザーになります。つまり、先月にログインしたことになります。 –

関連する問題