我目前正致力于学校项目的禁止/取消功能。我有一个带有一个is_banned列的User表。每当我执行一个更新查询以将状态从unbanned更改为banned时,我想传递一个值,该值包含用户被禁止的时间。我们说24小时。事情是我想在那之后自动取消他。这可能吗?
答案 0 :(得分:1)
嗯,禁止可能不常见,所以你可以使用事件。当某人被禁止时,请创建一个事件以解除该人的责任。
我仍然不喜欢这个主意。当unban作业应该运行时,数据库可能会发生故障。用户可能会再次被禁止,延长禁令期。
我认为更好的方法是在表格中添加一个列(例如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;