首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mysql更新查询中根据lastlogin增加登录天数

问如何在mysql更新查询中根据lastlogin增加登录天数
EN

Stack Overflow用户
提问于 2013-05-01 22:39:24
回答 1查看 86关注 0票数 0

我在mysql表中有以下结构:

代码语言:javascript
复制
-------------------------------------
| id | username | lastlogin  | days |
-----+----------+------------+-------
| 1  | user-xyz | 2013-04-29 | 0    |
-------------------------------------

上面的'lastlogin‘列是date列,'days’列是int(3)列。我想做的是,当用户登录时,lastlogin列将像往常一样每次更新。同时,如果登录日期(用户登录时)晚于lastlogin列的日期,则“days”列将递增。如果用户在同一天再次登录,则天数将相同(不会更新)。

在这种情况下,mysql查询将是什么?

查询格式如下所示:

代码语言:javascript
复制
$logindate = date("Y-M-D",time());

UPDATE table
SET lastlogin=$logindate, days=days+1 if $logindate>lastlogin
WHERE usename=user-xyz

我之前发布了这个问题,Vishy (一个用户)给出了以下解决方案:

代码语言:javascript
复制
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 update查询的lastlogin列,如何递增days列中的值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-01 23:06:43

当您想要处理条件表达式时,CASE expression非常方便。

SQLFiddle CASE example

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

SQLFiddle IF example

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16320214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档