0

在 mysql 中,我有一个包含列的用户表

ban_start_date [日期时间]

ban_days [int]

这意味着用户被禁止ban_start_date再多ban_days天。如何选择用户表,但添加一个新列,说明他们被禁止的天数?

我知道我需要检查 NOW() 是否介于ban_start_dateban_start_date+之间ban_days,如果是,请找出差异。类似的东西。

谢谢

4

2 回答 2

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_daysban_start_date临时生成的ban-enddate ( DATE_ADD(banned_users.ban_start_date , INTERVAL banned_users.ban_days DAY)) 中。之后DATEDIFF用于计算ban-endate和今天日期之间的天数,这实际上应该导致ban_days_left.

于 2015-01-08T22:52:30.537 回答
0

为什么不存储 ban_end_date 呢?如果你愿意,你可以存储ban_days,但你不应该经常需要这个值。

存储 bad_end_date 的好处(我认为)是未被禁止的人会将其设为 NULL。查找这个值并告诉用户非常容易:

“你被禁止直到ban_end。”

在一天开始时,您将检查具有非 NULL bad_end_date 值的人,其中 ban_end_date < now() 并将其设置为 NULL。简单的。

于 2015-01-09T05:41:46.990 回答