在 mysql 中,我有一个包含列的用户表
ban_start_date [日期时间]
ban_days [int]
这意味着用户被禁止ban_start_date
再多ban_days
天。如何选择用户表,但添加一个新列,说明他们被禁止的天数?
我知道我需要检查 NOW() 是否介于ban_start_date
和ban_start_date
+之间ban_days
,如果是,请找出差异。类似的东西。
谢谢
在 mysql 中,我有一个包含列的用户表
ban_start_date [日期时间]
ban_days [int]
这意味着用户被禁止ban_start_date
再多ban_days
天。如何选择用户表,但添加一个新列,说明他们被禁止的天数?
我知道我需要检查 NOW() 是否介于ban_start_date
和ban_start_date
+之间ban_days
,如果是,请找出差异。类似的东西。
谢谢
请试试:
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_start_date
临时生成的ban-enddate ( DATE_ADD(banned_users.ban_start_date , INTERVAL banned_users.ban_days DAY)
) 中。之后DATEDIFF
用于计算ban-endate和今天日期之间的天数,这实际上应该导致ban_days_left
.
为什么不存储 ban_end_date 呢?如果你愿意,你可以存储ban_days,但你不应该经常需要这个值。
存储 bad_end_date 的好处(我认为)是未被禁止的人会将其设为 NULL。查找这个值并告诉用户非常容易:
“你被禁止直到ban_end。”
在一天开始时,您将检查具有非 NULL bad_end_date 值的人,其中 ban_end_date < now() 并将其设置为 NULL。简单的。