在mysql中,我有一个带有列
的用户表ban_start_date [datetime]
ban_days [int]
这意味着用户被ban_start_date
禁止再过ban_days
天。如何选择用户表,但添加一个新列,说明它们被禁止还有多少天?
我知道我需要检查NOW()是否在ban_start_date
和ban_start_date
+ ban_days
之间,如果是,请找出差异。这样的事情。
由于
答案 0 :(得分:0)
请尝试:
SELECT
DATEDIFF(DATE_ADD(banned_users.ban_start_date , INTERVAL banned_users.ban_days DAY), DATE(CURDATE())) AS ban_days_left
FROM
users as banned_users
WHERE
DATE_ADD(banned_users.ban_start_date , INTERVAL banned_users.ban_days DAY) > DATE(CURDATE());
查询仅接受在执行时被禁止的用户,然后将ban_days
添加到临时生成 ban-enddate 的ban_start_date
({ {1}})。之后DATE_ADD(banned_users.ban_start_date , INTERVAL banned_users.ban_days DAY)
用于计算 ban-enndate 和今天的日期之间的天数,这实际上应该导致DATEDIFF
答案 1 :(得分:0)
为什么不存储ban_end_date呢?如果你想要,你可以存储ban_days,但你不应该经常需要这个值。
关于存储bad_end_date的好处(我认为)是未被禁止的人将其作为NULL。查找这个值并告诉用户非常容易:
"你被禁止直到ban_end。"
在一天开始时,您将检查具有非NULL bad_end_date值的人,其中ban_end_date< now()并将其设置为NULL。容易。