2012-02-20 12 views
2

ユーザがシステムにログインする日数をカウントするのが一般的です(stackexchangeなど)。 LAST_DATEが01​​ログインの日数をカウントするMySQLクエリ

ここで通常のユーザーテーブルでは、私がログイン情報が

UPDATE users SET 
last_login='date', number_of_login=number_of_login + 1, number_of_days=? 
WHERE user_id='user_id' 

として更新し、現在の日がnumber_of_day=number_of_day+1と日数を更新するlast_loginと異なっていることを確認するために最善のものです。

私は心の中で2つのメソッドを持っていますが、彼らはナイーブであるように思わ:

方法1:方法2 PHP

でlast_loginをキャッチし、現在の日付と比較する SELECT

を持つ:のようなトリックを使用してサブSELECT

(可能であれば)1つの簡単なクエリでこれを行うことを望みます。

答えて

1

あなたのコメントが間違っていない場合は、last_login!= curdate()の場合にのみlast_loginは常に更新したいが、number_of_daysは更新したい。これを試してください:

UPDATE users SET 
number_of_days = if (last_login = curdate(), number_of_days, number_of_days + 1), 
last_login='date', number_of_login = number_of_login + 1 
WHERE user_id='user_id' 
+0

WHERE句は更新全体を停止します。いずれにしてもlast_loginを記録する必要があります(これが今日の最初のログインか何回かにかかわらず) – Googlebot

+0

私は自分の答えを更新しました。今回私が正しいと思ったらお知らせください:) –

+0

ありがとうございました。これはまさに私が意味していたものです:) – Googlebot

2

DATEDIFFMySql機能:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_datediffを使用します。

DATEDIFF()はexpr1のを返す - expr2のは、他の1つの 日から日の値としてを発現しました。 expr1とexpr2は日付または日付と時刻です。 式です。値の日付部分だけが 計算で使用されます。

結果をフェッチした後、フェッチされた列がゼロより大きいかどうかを確認して、日付が異なるかどうかを判断する必要があります。

関連する問題