2010-06-13 153 views
0

好吧,我正在嘗試在基於AJAX的應用程序中爲活動用戶計數功能工作。我想用正確的語法表達下面的SQL查詢,但我不知道如何編寫它。所需的SQL查詢低於:活動用戶跟蹤,PHP會話

SELECT count(*) 
FROM active WHERE timestamp > time() - 1800 
    AND nick=(a string that doesn't contain [AFK]) 

現在,我也明白,時間() - 1800可以被分配給一個變量,但如何爲timestamp > variable和Nick不包含寫在SQL字符串?

+1

對於不包含[AFK]的字符串,我對SQL的使用不太好,但也許使用:AND NOT LIKE「%[AFK]%」 – alternative 2010-06-13 13:40:27

回答

2
SELECT count(*) 
FROM active WHERE timestamp > unix_timestamp() - 1800 
    AND nick NOT LIKE '%[AFK]%' 
0

您的意思是time()是指當前時間嗎?我們可以假設timestamp的類型是datetime?那麼這應該工作:

SELECT 
    count(*) 
FROM 
    active 
WHERE 
    timestamp > NOW() - 1800 
+0

now()wouldn'因爲我們在尋找時間戳。這個問題留下的評論是否適用於AFK檢查? – Nik 2010-06-13 13:43:43

+0

呵呵,NOW()是CURRENT_TIMESTAMP()的同義詞,但我看到接受的答案是關於* Unix *時間戳,這對我來說並不明顯。無論如何,你需要的是http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html。 – chryss 2010-06-13 13:51:03

+0

抱歉不清楚。 – Nik 2010-06-13 13:51:51

0

關於用戶名,你應該把它變成一個SQL查詢(SQL Injection)之前每個變量進行篩選。

$nick = mysql_escape_string($nick); 

然後在SQL查詢:

$sql = "SELECT count(*) FROM `active` WHERE `timestamp` > (time() - 1800) AND `nick` = '{$nick}' AND `nick` NOT LIKE '%[AFK]%' LIMIT 1"; 
+0

它被過濾了,我只發佈了相關的代碼,並且你的nick =查詢的一部分不會只過濾沒有[AFK]字符串的結果。 – Nik 2010-06-13 13:46:02

0

SELECT COUNT(*)FROM 活性 WHERE時間戳> DATE_ADD(NOW(),INTERVAL -1800秒) 和Nick NOT LIKE' %'[AFK]%'