2012-05-01 3 views
1

에서 PHP 함수 호출 대 복잡한 쿼리는이 같은 쿼리가 :계산 : 루프

Select E.ID, E.NAME, 
    date_format( CONVERT_TZ(CONVERT_TZ(E.ST, '+00:00', '+5:00'), 
    '+00:00', if(ET.GT LIKE '%.5', REPLACE(ET.GT, '.5', ':30') , CONCAT(ET.GT, ':00') 
)), '%Y-%m-%e %r'), concat(date_format( CONVERT_TZ(CONVERT_TZ(E.ET, '+00:00', 
    '+5:00') , '+00:00', if(ET.GT LIKE '%.5', REPLACE(ET.GT, '.5', ':30') , CONCAT( 
    ET.GT, ':00'))), '%Y-%m-%e %r') , ' ', if (TC is NULL, '', concat(TC, 'T'))), 
    EE.CL, EC.EC, CONCAT('##PATH##', E.ID, '/') 

을 이러한 필드는 4 개 개의 다른 테이블에서 가져온 있습니다. 조건, 형식화 항목 등은 동부 표준시에서 특정 시간대를 테이블 중 하나에서 설정으로 변환하는 것입니다.

확실히 멋진 검색어는 아닙니다 .--). 여기에 이유가 있습니다. 나는이 모든 일들을 질의로 처리하려고 노력하고 있습니다.

  1. 이러한 결과는 배열로 반환 된 다음 JSON으로 인코딩되고 발신자에게 다시 전송됩니다.
  2. PHP에서 결과를 반복 할 필요가 없습니다. 결과를 그대로 전달할 수 있습니다.
  3. 불필요한 추가 열에 대해 걱정할 필요가 없습니다. 필요한 열만 가져올 수 있습니다.

이것은 나를 위해 아주 잘 작동합니다!

질문 : 성능 및 기타 디자인 관점 (들)에서

하지만, 또는 내가 PHP에서 처리를하는 것에 대해 생각이 필요로 좋은 떠날 수 있나요? 나는 (CONVERT_TZ, 경우 등) 나는 쿼리의 복잡성을 제거 할 때

  1. 루프 반환 된 배열을 통해 두 가지 일을하고 시간대를 계산하는 함수를 호출해야합니다.
  2. 불필요한 배열 요소를 제거하십시오.

생각 하시겠습니까?

편집 :

다음은 조인은 다음과 같습니다

LEFT JOIN eeemps EER ON e.id = EER.eid 
LEFT JOIN eemp Ee ON eer.empid = ee.empid 
LEFT JOIN EclassS EC ON E.EVN = EC.E_ID 
LEFT JOIN E_tz NE ET ON E.TZID = ET.ID 

where date between x and y, and e_id = 123 

그게 모든 콘드는 "". 테이블과 필드 이름을 무시하십시오. 나는 그들을 바꿨다.

+0

쿼리의 왼쪽 부분을 표시하십시오. 'SELECT' 절이 결코 병목 현상이 아님 – zerkms

+0

조인이 추가되었습니다. "어디서"상태가 그렇게 복잡하지는 않습니다. –

+0

이것에 대한 의견이 있으십니까? –

답변

0

서버의 PHP 부분에는 이미 멋진 작업이있을 수 있으므로 MySQL에서 가능한 한 가장 잘하는 것이 문제를 해결하는 올바른 방법입니다. 또한, MySQL 방식은 PHP보다 100 배 빠른 99 배입니다. 그리고 큰 쿼리에 대해 걱정하지 마십시오. 가능한 경우 코드 생성 (예 : 조인)을 수행하고 서식을 쉽게 지정하는 것이 매우 중요하다는 것을 명심하십시오.