如何在mysql更新查询中基于lastlogin增加登录天数

时间:2013-05-01 14:39:24

标签: mysql

我在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(一位用户)给出了以下解决方案:

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日之间每天登录。他/她可能已登录21,23,25,27& 2013年4月30日,所以他/她实际登录了5天,但上面的代码将放置10天。解决方案是在用户登录时增加days列的值。

那么如果mysql update query的登录日期大于lastlogin列,我怎样才能在days列中增加值?

1 个答案:

答案 0 :(得分:0)

当你想要做条件表达式时,CASE expression很方便。

SQLFiddle CASE example

从该文档中我看到MySQL还有一个更简单的IF表达式,可以在这里使用:

SQLFiddle IF example