2009-11-22 4 views
3

다음은 내 mysql 쿼리입니다. 많은 도움이되는 질문과 의견을 통해 나는 거의 나의 여정 끝에 있습니다. 이 쿼리의 배경은 사용자가 링크를 제출하고 응용 프로그램이 두 개의 행을 하나의 링크에 삽입하고 다른 하나를 투표에 삽입하는 것입니다 (기본 투표는 사용자가 자신의 제출에 대해 투표하지 않는 이유는 무엇입니까?) 그런 다음 모든 투표는 다른 행 투표 테이블에 karma_up 또는 karma_down이 1과 같습니다 (곧 여분의 열을 저장하려면 karma_delta으로 변경해야합니다.) 또한 내 쿼리를 b0rking하는 것으로 보이는 인기있는 알고리즘이 있습니다. 아래 쿼리를 실행하면이 문제가 발생합니다. 오류가 발생했습니다.Mysql 오류 : # 1247 - 참조 'karma'가 지원되지 않음 (그룹 기능 참조)

#1247 - Reference 'karma' not supported (reference to group function) 

이 쿼리의 대부분의 요점은 카르마

SELECT links.*, (SUM(votes.karma_up) - SUM(votes.karma_down)) AS karma 
FROM links, votes 
WHERE links.id = votes.link_id 
GROUP BY votes.link_id 
ORDER BY (karma - 1)/POW((TIMESTAMPDIFF(HOUR, links.created, NOW()) + 2), 1.5) DESC 
LIMIT 0, 100 
를 얻을 수 있습니다

ORDER BY 부분의 인기 알고리즘이 없으면 쿼리가 완벽하게 실행되고 votes 테이블에서 sum'ed karma를 추가하고 값이있는 추가 열을 추가합니다.

답변

7

문제는 여기에 있습니다 : 별칭으로 정의된다 무언가에 의해

`ORDER BY karma... 

당신은 주문할 수 없습니다. 시도해보십시오.

`ORDER BY ((SUM(votes.karma_up) - SUM(votes.karma_down)) - 1)/POW((TIMESTAMPDIFF(HOUR, links.created, NOW()) + 2), 1.5) DESC` 

DB가 두 번 평가하지 않기를 바랍니다. 그렇지 않은 경우에는 별명을 작성하기 위해 먼저 주문이없는 내부 선택을 사용하고, 다른 선택을 사용하여 주문하십시오.

+0

정말요? 그게 속임수 야? 별칭을 사용할 수 없습니까? 젠장, 너는 자유로운 카르마를 위해서 나를 따라갈 수있을거야. –

+0

@ TheLizardKing :보다 간단한 쿼리에 별칭을 사용할 수 있습니다. (적어도 SQL 5.1의 경우) –

+1

실제로 별칭으로 주문할 수 있습니다. 일반적으로 앨리어스 이름 주위에는 백 틱이 필요합니다. 그러나 GROUP BY와 결합 된 경우 SUM과 같은 그룹 기능의 결과 인 별칭이 아닙니다. –