2013-04-04 2 views
2
나는 성공적 그러나

가 방문자의 시간대

SELECT COUNT(*) as total FROM track 
WHERE FROM_UNIXTIME(date,'%Y-%m-%d %h:%m:%s') > DATE_ADD(NOW(), INTERVAL -2 DAY) 
AND FROM_UNIXTIME(date,'%Y-%m-%d %h:%m:%s') < DATE_ADD(NOW(), INTERVAL -1 DAY) 

를 사용하여 어제의 MySQL의 데이터를 가져 오는거야

어제의 MySQL의 데이터를 가져 오기, 그것은 서버의 시간대를 사용합니다. 내 서버가 미국에 있습니다. 방문자가 미국 (예 : 아시아 또는 유럽)과 다른 시간대를 사용하는 경우 어제 데이터가 사용자에게 적합하지 않습니다. 방문자의 시간대를 기반으로 올바른 어제 결과를 가져 오려고합니다. 내가 PHP에서 방문자의 시간대를 얻을 수 있지만, 나는 그것을 MySQL에서 사용하는 방법을 알아낼 수 없습니다.

+0

당신은 당신이 원하는 것을 찾을 수이 링크를 시도하십시오. http://stackoverflow.com/questions/1718935/how-do-i-get-a-visitors-time-zone-in-php – Ihab

+0

내 문제는 현재 시간대를 가져 오는 것이 아니라 MySQL에서 사용하는 것입니다. 데이터를 가져올 때. – user198989

답변

5

시간을 UNIX 시간 소인으로 저장하지 말고 TIMESTAMP으로 저장하십시오. 그럼 당신은 단순히 time_zone을 설정할 수 있습니다 모든 것이 원하는대로 변환됩니다 :

SET time_zone = '+10:00'; 

SELECT COUNT(*) AS total 
FROM track 
WHERE date > NOW() - INTERVAL 2 DAY 
    AND date < NOW() - INTERVAL 1 DAY 

그렇지 않으면, 당신은 CONVERT_TZ()를 사용할 수 있습니다

SELECT COUNT(*) AS total 
FROM track 
WHERE date > UNIX_TIMESTAMP(CONVERT_TZ(NOW() - INTERVAL 2 DAY, '+3:00', '+10:00')) 
    AND date < UNIX_TIMESTAMP(CONVERT_TZ(NOW() - INTERVAL 1 DAY, '+3:00', '+10:00')) 
+0

+1 예제로 좋은 답변입니다! – nickhar

+0

동일한 문제를 다루기 위해 복제본을 입력하는 중이었습니다. MySQL에서 데이터를 쿼리하는 디자인이 있다면, UNIX TIMESTAMPS를 사용하십시오. 쿼리에서 사용하기 전에 타임 스탬프를 MySQL datetimes로 변환해야한다는 사실은 쿼리 최적화를 위해 인덱스 사용을 즉시 금지한다는 것을 의미합니다 .이 대답에 표시된 첫 번째 쿼리는'date'에 인덱스를 사용할 수 있고, 두 번째 쿼리는 그렇지 않습니다.) 또한'date'에 모든 날짜의 기초로 UTC를 사용하기를 원할 것입니다. 날짜 필드를 입력하고 로컬 사용자 시간으로 변환 할 응용 프로그램을 남겨주세요. –

+0

@MikeBrant : 두 번째 쿼리에서 인덱스를 사용할 수있는 수정 된 답변보기 (UNIX 타임 스탬프 사용) – eggyal

관련 문제