2012-04-25 3 views
2

이 쿼리는 어느 정도 작동합니다. 'rating'(가장 높은 등급 인 7로 출력)에 대한 올바른 값을 반환하지만 'content'에 대한 출력은 테이블의 다른 행에 있습니다. (가장 높은 등급의 행이 ​​아닌 7)SQL MAX 기능이 제대로 작동하지 않는 이유는 무엇입니까?

$bestAnswerQuery = MYSQL_QUERY("SELECT content, MAX(rating) as rating FROM answers WHERE questionID = '$questionID'"); 

$fetchBestAnswer = MYSQL_FETCH_ASSOC($bestAnswerQuery); 

echo "$fetchBestAnswer[content] $fetchBestAnswer[rating]"; 

아무도 말해 줄 수 있습니까? 검색 한 결과 제대로 작동하지 않는 이유를 찾을 수 없습니다.

+0

그래서, 당신 ' 주어진 질문에 대해 가장 높은 평점과 그 평점을 가진 콘텐츠를 얻으려고 시도하고 있습니까? –

+0

집계 된 함수를 처리하는 방법을 정확히 알지 못했을 것입니다. 나는 그들이 GROUP BY 절을 가져야한다는 것을 몰랐다. 감사합니다. –

답변

8

이 아닌 방법 SQL에서 MAX 일 같은 집계. 혼란은 MySQL의 (기본) ANSI가 아닌 집계 처리에서 오는 것입니다.

MAX과 같은 집계는 그룹에서 작동합니다. group by 절이 없으면 전체 결과 집합이 단일 그룹으로 간주됩니다. group by 절의 일부인 식만 집계에 포함되지 않고 select 절에 포함될 수 있습니다. group by이없는 경우 select 절의 모든 열이나 식을 집계에 포함해야합니다.

그러나 MySQL의 기본 구성에서는 그룹화되지 않은 표현식을 select 절에 포함시킬 수 있으므로이 문제는 해결되지만 주어진 표현식이 값을 얻기 위해 사용하는 행은 정의되지 않습니다. 그룹 내의 모든 행이 될 수 있습니다. 당신이 얻고 싶은 것은 최대 rating 주어진 질문에 대한 테이블에서 관련 content 열 경우 그 장황한 대답 한 후

, 당신은이 작업을 수행 할 수 있습니다

select 
    rating, 
    content 

from answers 

where questionID = '$questionID' 

order by rating desc 

limit 1; 
+0

정말 고마워요. 등급을 내림차순으로 지정하고 제한하는 것에 대해서 생각조차하지 않았습니다. –

0

변경 조금이 같은 질의 :

$bestAnswerQuery = mysql_query("SELECT content, rating as rating 
      FROM answers 
      WHERE questionID = '$questionID' 
      AND rating = MAX(rating)"); 
+2

주어진 질문에 대한 두 개의 답변이 동일한 최대 등급을 가지고있는 경우 여러 행을 반환합니다. –

+0

@AdamRobinson 그리고 OP가 단지 하나의 행을 echo하는 것 때문에 결과에 어떻게 영향을 미칠 것인가! – hjpotter92

+3

사실 충분하지만, OP가 프레젠테이션이 변경된 경우 놀라움이 없도록 OP가 쿼리를 올바르게 구조화하는 방법을 알고 있어야한다고 생각합니다. –

관련 문제