mysql
2012-04-28 2 views 0 likes 
0

는 FROM_UNIXTIME 무겁게이 같은 쿼리의 성능에 영향을 미치지 않습니다FROM_UNIXTIME 및 성능

 (
      (calltasks.task_dueDate = '".$date."') # Tasks of this date 
      OR 
      (calltasks.task_dueDate < '".$date."' AND calltasks.task_status = 'scheduled') # Tasks still available on this date 
      OR 
      (FROM_UNIXTIME(calltasks.task_executionTime, '%Y-%m-%d') = '".$date."') # Tasks finished this date 
     ) 

아니면 내가 그걸로 괜찮을 것을 ??

답변

2

UNIX 시간을 형식화 된 문자열로 변환하는 대신 (현재의 경우와 마찬가지로) UNIX_TIMESTAMP()을 사용하여 $date 변수를 UNIX 시간으로 변환 한 다음 정수를 비교하는 것이 좋습니다 (차이점을 확인하는 것입니다). 24 시간 이내). 정수 비교는 항상 문자열 비교보다 빠르게 될 것입니다 : 또는

(calltasks.task_executionTime - UNIX_TIMESTAMP('$date')) BETWEEN 0 AND 86400 

, 당신은 이미 당신이이 쿼리를 호출 할있는 언어로 어딘가에 쉽게 사용할 수 $date의 UNIX 타임 스탬프 값이 찾을 수 있습니다 : 예를 들어, PHP를 , 날짜를 UNIX 시간 소인으로 저장합니다.

반드시이어야합니다. $date은 쿼리에이 방식으로 삽입하는 경우 조작 할 수 없습니다. 의심이되는 경우 준비된 성명서를 사용해야합니다. 왜 또는 무엇인지 알 수없는 경우 Bobby Tables을 읽으십시오.

+0

UNIX_TIMESTAMP ($ date)를 사용하여 매우 유용한 대답이지만, task_execution을 비교하는 데 필요한 정확한 시간 소인을 제공하지 않습니다. 사용자가 알지 못했을 때를 대비하여 날짜는 Y-m-d이므로. – Dewan159

+0

ammm, 나는 잘 모르겠다. $ date = '2012-08-08'Unix 형식으로 변환 = "1344373200". 'task_execution'을 위해 데이터베이스에 저장된 값은 날짜와 시간을 포함하기 때문에 두 가지를이 방법과 비교하는 것은 절대 의미가 없습니다. 덕분에 – Dewan159

+0

'task_executionTime' 칼럼의 데이터 타입은 INT – Dewan159

관련 문제