2011-12-09 1 views
3

다음과 같은 코드가 있습니다. 가능한 오타가 3 열을 선택해야합니다. 첫 번째는 순위, 반대 및 손실 백분율입니다.mysql에서 (PHP를 통해) 동일한 작업을 수행하는 더 효율적인 방법이 있습니까?

 SELECT COUNT(B.F_FACTOR) AS RANK, A.F_OPPOSITION, A.F_FACTOR 
     FROM 
      (
      SELECT 
      F_OPPOSITION, 
      IF(SUM(F_RESULT='L',=1,1,0) AS F_NUM, 
      IF(SUM(F_RESULT IN ('W','D','L'),=1,1,0) AS F_DENOM, 
      ROUND(SUM(F_NUM/F_DENOM),2) AS F_FACTOR 
      FROM $table 
      GROUP BY F_OPPOSITION 
     ) A, 
      (
      SELECT 
      F_OPPOSITION, 
      IF(SUM(F_RESULT='L',=1,=1,=0) AS F_NUM, 
      IF(SUM(F_RESULT IN ('W','D','L'),=1,=1,=0) AS F_DENOM, 
      ROUND(SUM(F_NUM/F_DENOM),2) AS F_FACTOR 
      FROM $table 
      GROUP BY F_OPPOSITION 
      ) B 
    WHERE A.F_FACTOR <= B.F_FACTOR 
      OR (A.F_FACTOR=B.F_FACTOR AND A.F_OPPOSITION=B.F_OPPOSITION) 
    GROUP BY A.F_OPPOSITION, F_FACTOR 
    ORDER BY A.F_RANK ASC, A.F_FACTOR DESC, A.F_OPPOSITION DESC; 

내가 아마 할 것이다, PHP를 화면에 야간 테이블을 업데이트 한 다음이를 표시하는 테이블에서 기본 선택 X, Y, Z를 할 cron 작업으로 이것을 실행하는 것이 가능하다 .

그러나 SQL 관점에서 더 많이 배우는 측면에서 볼 때 타이핑과 프로세싱 모두에서 동일한 출력을 얻는 것이 더 빠르고 쉽습니다.

감사합니다.

답변

1

밤에 생성 된 테이블을 업데이트하기위한 cron 작업이 추가되어 처리 시간은 무시할 수 있습니다.

0

데이터베이스에서 결과를 조작하는 것이 서버 측 언어 (이 예에서는 PHP)에서 달성하는 것보다 항상 빠릅니다. 그래서 crontab을 실행하십시오.

+0

예 제가 동의하고 제가 취할 접근법입니다. 그러나 이것은 제가 원했던 질문에 대한 대답이 아니 었습니다. 동일한 결과물을 얻으려면 위의 선언문을 수정하는 더 빠른 방법이 있습니까? – ChelseaStats

관련 문제