2017-02-16 1 views
0

사용자의 로컬 시간대를 고려하여 select 문을 변경하려고했지만 내 머리를 감쌀 수 없습니다.convert_tz가 포함 된 MySQL Select 문

사용자 시간대에서 현재 날짜의 레코드를 선택하는 것으로 가정합니다.이 경우 4 시간으로 하드 코딩됩니다. 내가 사용하고 현재

...

내가 convert_tz를 사용하여 그 진술을 변경하려는
SELECT * FROM {$this->burnsTable} WHERE DATE(created) = DATE(NOW() - INTERVAL 4 HOUR) 

것을 가능할까요?

답변

1

MySQL은 사용자의 시간대에 대해 전혀 알지 못합니다. get it (자바 스크립트) 또는 (가능하면 PHP)이 필요하지만 가장 좋은 방법은 사용자에게 선택하도록 요청하는 것입니다. 이 경우 store their choice in the database을 입력 한 다음 을 입력하면의 시간대를 알 수 있습니다. 그런 다음 convert_tz을 사용할 수 있습니다 (또는 ADDTIME 호출에 대한 오프셋을 채 웁니다). 당신이 time zone strings와 데이터베이스를 설정 한 경우에 당신은 사람들을 저장하고 convert_tz 함께 사용, 또는 당신은 여전히 ​​당신이해야 할 사용자 테이블에 가입 할 수 있습니다

SELECT * FROM {$this->burnsTable} WHERE DATE(CONVERT_TZ(created,'+00:00','+4:00')) = CURDATE(); 

같은 작업을 수행하여 오프셋 (offset)를 convert_tz을 사용할 수 있습니다 그러나이 작업을 수행하는 대신 잠재적으로 많은 쿼리가 될 수 있으므로 PHP 사용자 모델에 표준 시간대를 저장 한 다음 매번 검색하지 말고 적절한 오프셋을 전달하는 것이 좋습니다.

+0

죄송합니다. 그 부분을 분명히하지 않았기 때문에, 나는 *** 그들의 시간대를 알고 있습니다. 그것은 자신의 시간대와 관련하여 현재 날짜의 기록을 선택하는 능력에 관한 것입니다. 이것은 내가 필요한 것처럼 보입니다. – bc2946088