2016-04-15 80 views
0

我有問題,我datetime場和CASE功能。我存儲了用戶的最後一個操作時間戳,並且我想創建一個視圖,該視圖向我顯示如果最後一個操作在最近5分鐘內該用戶處於聯機狀態。MySQL的日期時間CASE

然而,我的功能無法正常工作,我需要你的幫助。這是我試過的。從用戶表

SELECT 
CASE a.lastAction 
WHEN >= (NOW() - INTERVAL 5 MINUTE) THEN 
    1 
ELSE 
    0 
END AS 'online' 
FROM 
    users a 

樣品datetime數據:2015年12月22日22時43分01秒

在此先感謝。

回答

2

由於您使用的是>=運算符,因此查詢返回錯誤。您應該檢查case syntaxWHEN子句的值應該是一個表達式。

所以,你應該使用這種方法:

SELECT 
CASE 
WHEN a.lastAction >= (NOW() - INTERVAL 5 MINUTE) THEN 
    1 
ELSE 
    0 
END AS 'online' 
FROM 
    users a 

我只是WHEN子句中移動的a.lastAction - 你可能會注意到,有在MySQL中寫一個CASE塊的方式有兩種:

CASE case_value 
    WHEN when_value THEN statement_list 
    [WHEN when_value THEN statement_list] ... 
    [ELSE statement_list] 
END CASE 

CASE 
    WHEN search_condition THEN statement_list 
    [WHEN search_condition THEN statement_list] ... 
    [ELSE statement_list] 
END CASE 

你應該甲肝e使用了第二個。

+0

很好的答案!非常感謝你。 – lingo

0

試試這個;

SELECT 
IF (a.lastAction >= (NOW() - INTERVAL 5 MINUTE), 1,0) AS 'online' 
FROM users a` 
+2

更好地解釋爲什麼這解決了這個問題。 – fluter