2010-06-13 5 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이며, SQL로 작성된 문자열을 포함하지 않는 닉?

+1

[AFK]가 포함되지 않은 문자열에 대해서는 SQL에 익숙하지 않습니다. AND NOT LIKE "% [AFK] %" – alternative

답변

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

현재 시간을 나타 내기 위해 time()을 말합니까? timestampdatetime으로 가정 할 수 있습니까? 그런 다음이 작동합니다 :

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

now() wouldn' 우리는 타임 스탬프를 찾고 있기 때문에 일하지 않습니다. 질문에 남겨진 의견이 AFK 검사를 위해 작동합니까? – Nik

+0

허, NOW()는 CURRENT_TIMESTAMP()와 동의어이지만, 받아 들여진 응답이 나에게 명백하지 않은 * Unix * 타임 스탬프에 대해 말하는 것을 볼 수 있습니다. 어떤 경우에도 필요한 것은 http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html입니다. – chryss

+0

명확하지 않은 점에 대해 사과드립니다. – Nik

0

를 사용자 이름에 대해, 당신은 SQL 쿼리 (SQL Injection)로 퍼팅하기 전에 각 변수를 필터링합니다.

$nick = mysql_escape_string($nick); 

다음 SQL 쿼리에

: 활성 FROM

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

필터링 되었기 때문에 관련 코드 만 게시하고 nick = 쿼리의 일부는 [AFK] 문자열이없는 결과 만 필터링하지 않습니다. – Nik

0

SELECT COUNT (*) WHERE 타임 스탬프> (NOW(), INTERVAL -1800 SECOND) DATE_ADD 닉이 싫어 ' % [AFK] % '