2011-03-31 4 views
2

비디오 게임의 일일 도전 과제를 추적하는 시스템을 설정하고 있습니다. 매일 4 회의 도전과 1 회의 주간 도전이 있습니다. 각 챌린지는 ID가있는 테이블에 저장됩니다.이 ID는 챌린지가 재사용되는 재사용이 가능합니다 (약 22 %). 매일 매일의 과제를 저장하는 테이블이 있습니다. 다음과 같습니다.MySQL 쿼리 단순화에 대한 도움말

날짜 | 매일 1 | 매일 2 | 매일 3 | 매일 4 | 만료

챌린지가 재사용되기 때문에, ID로 챌린지가 사용 된 다른 요일을 찾아 볼 수 있습니다. 지금 당장이 쿼리를 사용하고 있습니다 :

SELECT date FROM `current_daily` 
    WHERE daily1 = # 
    OR daily2 = # 
    OR daily3 = # 
    OR daily4 = # 
    ORDER BY date ASC 

작동하지만 너무 복잡합니다. 나는 모든 OR을 필요로하지 않으므로이 쿼리를 실행하는 것이 더 나은 것을 찾으려고 노력하고 있지만 여러 열의 정보를 얻고 있으므로 IN()을 사용할 수있는 것처럼 보이지 않습니다. 이 쿼리를 단순화하고 동일한 정보를 얻을 수있는 또 다른 방법이 있습니까?

+1

테이블을 재구성하지 않고도 SQL을 간단하게 수행 할 수 있다고 생각하지 않습니다. –

답변

0

은이를 초기화하기 위해 IN을 사용하지만 성능 향상을 기대하지는 않습니다.

SELECT date 
    FROM `current_daily` 
    WHERE # IN (daily1, daily2, daily3, daily4) 
    ORDER BY date ASC 
+0

IN이 이와 같이 작동하지 않습니다. IN은 여러 필드에서 선택하지 않고 값의 범위를 선택하는 데 사용됩니다. –

+0

저는 성능 향상을 기대하지 않고 있습니다. 거대한 프로젝트는 아니며, 쿼리를 약간 정리하고 싶습니다. 사용하고있는 것이 너무 복잡하고, 훨씬 간단합니다. 나는 그것을 사용할거야, 고마워. – HaLo2FrEeEk

+1

왜 아래 표를 얻었습니까? 쿼리가 작동하고 현재 쿼리와 비교하여 똑같은 결과를 반환했으며 평균적으로 몇 밀리 초 빨랐습니다. – HaLo2FrEeEk