2009-08-28 4 views
0

두 개의 msyql 테이블, 배지 및 이벤트가 있습니다. BADGE_COUNT, 제목, Badges.description ASmysql 대신 max 값 가져 오기

SELECT COUNT (Badges.badge_ID) : 나는이 모든 이벤트를 찾아 가입하고 다음 코드를 사용하여 해당 이벤트 (제목 & 설명)의 배지 정보를 반환 사용 Badges는 제목 ASC 카운트에 추가

에 의해 Badges.badge_id = Events.badge_id GROUP ON Events 가입에서, 나는 대부분의 항목이 이벤트의 값을 알 필요가있다. max() 함수를 사용하여 PHP에서이 작업을 수행 할 것이라고 생각했지만 제대로 작동하려면 문제가 발생했습니다. 그래서, "ORDER BY badgecount DESC LIMIT 1"을 사용하여 위의 쿼리를 수정하여 동일한 결과를 얻을 수 있다고 결정했습니다. 단일 요소의 배열을 반환합니다.이 배열의 값은 모든 이벤트 중 가장 많은 총계입니다.

이 솔루션은 잘 작동하지만, PHP로 작업하는 대신 서버에 2 번 호출 (b/c는 이제 두 개의 쿼리 사용)하는 데 더 많은 리소스가 필요한지 궁금합니다. 만약 내가 PHP에서 어떻게 했어, 어떻게하면 연관 배열에서 특정 항목의 최대 값을 얻을 수 있습니까? (가능하면 키와 값을 반환 할 수 있으면 좋을까요?)

편집 : 괜찮 았어, 몇 시간 동안 휴식을 취하는 것이 놀랍습니다. 나는 오늘 아침에 코드를 열었고 코드를 간단하게 수정했다. 카운트 필드에 변수를 만들고 새 값이 이전 값보다 큰 경우 다음 값을 새 값으로 변경했습니다 (다음 코드의 "if"문을 참조하십시오).

if c> $ highestCount) { $ highestCount = $ c; }

+0

당신이 걱정하는 경우 (읽기) 성능이 계산하고 중복을 저장하는 생각이 새로운 항목이 만들어지면 정보? – VolkerK

+0

15 분 전 질문과 비슷한 질문입니다. http://stackoverflow.com/questions/1345307/php-retrieve-minimum-and-maximum-values-in-a-2d-associative-array – Amber

답변

4

이것은 "종교 전쟁"으로 이어질 수도 있지만 두 가지 쿼리 버전을 사용합니다. 나에게 가능한 한 데이터베이스에서 데이터를 처리하는 것이 더 깔끔하다. 장기적으로 쿼리 캐싱 (Query Caching) 등은 여분의 쿼리로 인한 오버 헤드를 줄일 수 있습니다.

어쨌든, PHP의 최대를 얻기 위해, 당신은 단순히 당신의 $ 결과 배열을 반복해야합니다

getMax($results) { 
    if (count($results) == 0) { 
    return NULL; 
    } 

    $max = reset($results); 
    for($results as $elem) { 
    if ($max < $elem) { // need to do specific comparison here 
     $max = $elem; 
    } 
    } 
    return $max; 
} 
+0

I 2 쿼리 방법에 동의합니다. 데이터베이스 호출은 (열이 인덱싱되는 한) 순서를 지정할 때 매우 빠르고 메모리를보다 효율적으로 사용합니다. – ctcherry

+0

두 가지 질문에 동의합니다. 인덱스 인자를 기반으로합니다 (db 엔진이 모든 값을 읽으려고 디스크를 치지 않을 수도 있음), 데이터베이스 서버가 다른 시스템에 있으면 트래픽도 절약됩니다. micromanaging 최적화에 조심하십시오 :) –

+0

이것은 내가 오늘 아침에 끝내었던 것과 비슷합니다. 또한 쿼리 메서드에 대한 의견을 주셔서 감사합니다. 나는이 후속 조치가 아마도 다른 질문에 속해있을 가능성이 높지만 어떤 방법이 리소스를 가장 적게 사용하는지 테스트하는 "최선의"방법은 무엇인가? – staypuffinpc