2017-04-09 26 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

相關問題