2017-04-09 24 views
0

我目前正在为一个学校项目开展禁止/禁用功能。我有一个用户表和一个is_banned列。每当我做一个更新查询将状态从未绑定状态更改为禁止状态时,我想传递一个值,其中包含用户被禁止的时间。比方说24小时。事情是我想在那段时间后自动解除他的禁令。这可能吗?如何在x小时后自动更改一个值?

回答

1

好吧,禁止可能不是经常发生,所以你可以使用使用事件。当某人被禁止时,创建一个事件来解除该人的禁令。

我还是不喜欢那个想法。当班底工作应该运行时,数据库可能会发生故障。用户可能会再次被禁止,从而延长禁令期限。

我认为一个更好的方法是在表格中添加一个列(比如说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; 
+0

嘿,这仍然是相当难受,让我得到这个直,所以每当我运行更新查询来改变is_banned = 0至is_banned = 1,我还必须更新一个名为bantime的列?在禁令期间,我可以通过48小时的48小时? –

+1

@VeraPerrone。 。 。其实,只要忘记'is_banned'并使用'bantime'即可。使用视图来计算'is_banned'。 –

+0

如果保存'banned_until',甚至可以缩短上面的内容。在这种情况下,可以省略“间隔24小时”。 – AMartinNo1

相关问题