2016-07-04 3 views
0

시간과 날짜를 기준으로 테이블에서 데이터를 검색해야합니다. 즉 어제 오후 5시에서 현재 날짜까지 오후 5 시까 지 데이터를 가져와야합니다. 나는이 문제의 메모를 해결하기 위해 어제와 오늘하지만 시간이 작동하지 않습니다 도움을 검색하는 다음 코드를 시도 : 수정 된 열은시간에 따라 데이터를 검색하는 방법은 MySQL?

SELECT * 
FROM `mdl_forum_posts` 
WHERE from_unixtime(modified, '%Y-%m-%d') = CURDATE() 
    OR from_unixtime(modified, '%Y-%m-%d') = date(CURDATE()-1) 
+2

을 제공합니다 . 이러지 마. 대신'DATETIME' 또는'DATE' 타입을 사용하십시오. 이렇게하면 쉽게 인덱싱 할 수 있으며 'BETWEEN? 및? 여기서 두 날짜는 임의의 날짜 또는 날짜 - 시간 값입니다. – tadman

+0

유닉스 타임 스탬프에 날짜 - 시간을 저장하는 것은 적절한 방법이 아닙니까? –

+1

C 프로그램에있을 수 있지만 SQL 데이터베이스에는 없습니다. 가능할 때마다 기본 열 유형을 사용하십시오. 데이터베이스 엔진은 쿼리 단순성 관점과 성능 모두에서 최적화되어 있습니다. – tadman

답변

0

월 CURDATE의 날짜 1 일() 경우 - UNIX 당신은 상처의 세계에 대한에있어 타임 스탬프대로 날짜 - 시간 값을 저장하는 경우 INTERVAL 1 DAY 정확한 전날 날짜

SELECT * FROM `mdl_forum_posts` 
WHERE modified BETWEEN UNIX_TIMESTAMP(
      CONCAT(CURDATE() - INTERVAL 1 DAY, '%Y-%m-%d'), ' 17:00:00')) 
     AND UNIX_TIMESTAMP(
      CONCAT(CURDATE(), ' 17:00:00')); 
1
SELECT * FROM `mdl_forum_posts` 
WHERE modified BETWEEN UNIX_TIMESTAMP(
     CONCAT(DATE_FORMAT(CURDATE()- INTERVAL 1 DAY, '%Y-%m-%d'), ' 17:00:00')) 
     AND UNIX_TIMESTAMP(
     CONCAT(CURDATE(), ' 17:00:00')); 

참고 CURDATE()가 있음을 타임 스탬프에 polymorphic; DATE_FORMAT은 계산식이 정수형 리턴 유형을 강제하는 첫 번째 술어에 필요합니다.

술어 내의 함수에서 속성을 감싸는 것은 색인의 사용을 불가능하게합니다. 역함수를 리터럴에 적용하면 색인을 사용할 수 있습니다. 심지어 색인이없는 경우에도 함수를 한 번만 비켜 볼 필요가 있기 때문에 더 빠릅니다.

+0

이 쿼리에 오류가 표시됩니다. –

+1

쿼리의 초기 단계에서 제거해야하는 추가 AND가 있습니다. – tadman

+0

어제 쿼리가 제대로 작동 할 때까지 지금 쿼리가 제대로 수행되지 않습니다. 데이터가 모두 올라오고 있습니다. –

관련 문제