私はmysqlテーブルに次の構造を持っています:
-------------------------------------
| id | username | lastlogin | days |
-----+----------+------------+-------
| 1 | user-xyz | 2013-04-29 | 0 |
-------------------------------------
上記の「lastlogin」列は日付列で、「days」列は int(3) 列です。私がやりたいことは、ユーザーがログインしている間、いつものようにlastlogin列が毎回更新されることです。同時に、(ユーザーがログインしている) ログイン日が lastlogin 列の日付より後の場合、'days' 列が増加します。ユーザーが同じ日に再度ログインした場合、日付は同じになります (更新されません)。
この場合、mysql クエリは何になりますか?
クエリ形式は次のようになります。
$logindate = date("Y-M-D",time());
UPDATE table
SET lastlogin=$logindate, days=days+1 if $logindate>lastlogin
WHERE usename=user-xyz
以前にこの質問を投稿したところ、Vishy (1 人のユーザー) が次の解決策を提供しました。
UPDATE table
SET days=DATEDIFF($logindate,lastlogin), lastlogin=$logindate
WHERE username='xyz'
しかし、コードは私が望んでいることを正確に行っていません。2013 年 4 月 21 日と 2013 年 4 月 30 日の日付差が 10 日であるためです。したがって、ユーザーが 2013 年 4 月 30 日にログインすると、日の列に 10 が入ります。しかし、ユーザーは 4 月 21 日から 30 日の間、毎日ログインしていない可能性があります。彼/彼女は 2013 年 4 月 21 日、23 日、25 日、27 日、30 日にログインした可能性があるため、実際には 5 日間ログインしましたが、上記のコードでは 10 日間となります。解決策は、ユーザーがログインするたびに days 列の値を増やすことです。
ログイン日がmysql更新クエリでlastlogin列よりも大きい場合、どうすればdays列の値を増やすことができますか?