2010-12-27 5 views
18

아래 쿼리에서 datesent이 24 시간 미만인 행 수를 어떻게 계산합니까? 필드 datesent은 시간 소인입니다. 사전에시간 소인이 24 시간 미만인 행 계산

감사합니다,

$message = "SELECT datesent, recipient 
       FROM privatemessage 
       WHERE recipient = '$u'"; 


    $messager = mysql_query($message); 

$messagearray = array(); 
+0

나는이 질문과 관련이 없으므로'css' 태그를 제거했습니다. –

답변

5

당신은 DATE_SUB 기능을 사용할 수 있습니다. where 절의 현재 날짜에서 하루를 빼십시오.

뭔가 편집

DATE_SUB(NOW(), INTERVAL 1 DAY) 

같은 : 변경 CURTIME()에 NOW()

+0

'CURTIME'은 날짜와 시간이 아닌 시간 만 반환합니다. –

+0

CURTIME은 현재 시간을 반환하며 현재 날짜와 아무런 관련이 없습니다. 대신 NOW()를 전달해야합니다. – TehShrike

3
$message="select count(1) 
from privatemessage 
where datesent>=date_sub(now(), 24 hours) 
and recipient='$u'" 

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

+0

기존 값이 24 시간을 뺀 후에 같은 값보다 크거나 같음을 비교하기 때문에 모든 행의 수를 반환합니다 ... 테이블의 열에 대해 함수를 수행하면 인덱스도 의미합니다. if 하나는 존재했기 때문에 조작에 사용할 수 없습니다. –

+0

맞습니다. 죄송합니다. MySQL을 사용하지 않으므로 게시하기 전에 솔루션을 테스트 할 기회가 없었습니다. –

+1

단위는 HOUR가 아니라 HOUR (단수)입니다. 이미 제공 한 링크를 참조하십시오. http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add –

48

사용 : 나는 이것이 오래 볼

SELECT COUNT(*) AS cnt 
    FROM PRIVATEMESSAGE pm 
WHERE pm.datesent >= DATE_SUB(NOW(), INTERVAL 1 DAY) 
+0

올바른 값을 전달하는 유일한 대답입니다. DATE_SUB의 첫 번째 매개 변수에 – TehShrike

+0

감사합니다 ... 이것은 유망 해 보입니다. 하지만 실제로 작동하는지 확인하기 위해 결과를 반향 출력하는 데 문제가 있습니다. 총계를 어떻게 울릴 수 있습니까? – John

+0

@ 존 : 열 별칭을 정의하도록 업데이트되었습니다. "cnt"는 열의 값을 얻기 위해 PHP에서 참조하는 것입니다. –

0

하지만 나중에 온라인 검색을 통해 여기에 오는 사람이라면 누구나 질문은 타임 스탬프가 아니라 날짜 시간에 대한 것임을 명확히 밝히고 싶습니다. 타임 스탬프에 기반한 카운트가 필요했습니다. 쉬운 수정은 datetime을 unix_timestamp로 변환하는 것입니다. MySQL 5.7에서 테스트되었습니다.

SELECT COUNT(*) AS cnt 
FROM PRIVATEMESSAGE pm 
WHERE pm.datesent >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))