0
我目前正在为一个学校项目开展禁止/禁用功能。我有一个用户表和一个is_banned列。每当我做一个更新查询将状态从未绑定状态更改为禁止状态时,我想传递一个值,其中包含用户被禁止的时间。比方说24小时。事情是我想在那段时间后自动解除他的禁令。这可能吗?如何在x小时后自动更改一个值?
我目前正在为一个学校项目开展禁止/禁用功能。我有一个用户表和一个is_banned列。每当我做一个更新查询将状态从未绑定状态更改为禁止状态时,我想传递一个值,其中包含用户被禁止的时间。比方说24小时。事情是我想在那段时间后自动解除他的禁令。这可能吗?如何在x小时后自动更改一个值?
好吧,禁止可能不是经常发生,所以你可以使用使用事件。当某人被禁止时,创建一个事件来解除该人的禁令。
我还是不喜欢那个想法。当班底工作应该运行时,数据库可能会发生故障。用户可能会再次被禁止,从而延长禁令期限。
我认为一个更好的方法是在表格中添加一个列(比如说users
)和最近的禁用时间。然后创建一个视图来获取用户取消禁止:
create view v_users as
select u.*
from users u
where u.bantime is null or u.bantime < now() - interval 24 hour;
的关键是使用此视图时,您的代码要解除封锁的用户。
或者,如果你只想要一个标志:
create view v_users as
select u.*, (u.bantime > now() - interval 24 hour) as isBanned
from users u;
嘿,这仍然是相当难受,让我得到这个直,所以每当我运行更新查询来改变is_banned = 0至is_banned = 1,我还必须更新一个名为bantime的列?在禁令期间,我可以通过48小时的48小时? –
@VeraPerrone。 。 。其实,只要忘记'is_banned'并使用'bantime'即可。使用视图来计算'is_banned'。 –
如果保存'banned_until',甚至可以缩短上面的内容。在这种情况下,可以省略“间隔24小时”。 – AMartinNo1