2016-07-26 6 views
0

왜 평균 정렬이 가장 좋고 투표 수가 위에서 아래로 갈 것인지 때문에 DESC는 "ORDER BY average, votes DESC"와 올바르게 정렬되지 않았습니다.하지만 DESC 어떤 일을 해결하지 못 했어. var_dump 내 결과가 http://pastie.org/private/b05smuh0fvw72wwp2w1zq 가장 낮은 엔트리가 바닥에 있지만, 맨 위에서 시작하여 맨 아래로 가야합니다.DESC가있는 SQL 쿼리가 제대로 작동하지 않습니다.

SELECT c.*, r.votes, c.total_comments, 
     ROUND(sumrate/votes) AS average 
FROM catalog c LEFT JOIN 
    (SELECT r.object_id, COUNT(*) as votes, SUM(r.rate) as sumrate 
     FROM ratings r 
     GROUP BY r.object_id 
    ) r 
    ON r.object_id = c.catalog_id LEFT JOIN 
    (SELECT c.catalog_id, COUNT(*) as total_comments 
     FROM comments c 
     GROUP BY c.catalog_id 
    ) c 
    ON c.catalog_id = c.catalog_id 
GROUP BY c.catalog_id 
ORDER BY average, votes DESC; 
+1

GROUP BY는 유효하지 않으며 최신 MySQL 버전에서는 허용되지 않습니다. GROUP BY 절이 지정된 경우 SELECT 목록의 각 열 참조는 그룹화 열을 식별하거나 집합 함수의 인수 여야합니다. – jarlh

+0

무엇을 의미합니까? 그룹화에서 짧은 테이블 별명입니까? 예를 보여줄 수 있습니까? – SkySonny

답변

5

order by이 아닌 모든 열의 순서를 정의 할 수 있기 때문에. 기본값은 ASC입니다.

ORDER BY average DESC, votes DESC 
3

에 대한

ORDER BY average ASC, votes DESC 

그러나 당신이 찾고에 자동으로

주문

ORDER BY average, votes DESC 

차례 당신은 모두 열에 대한 DESC를 지정해야합니다. 그렇지 않으면 기본적으로 ASC입니다

SELECT c.*, r.votes, c.total_comments, 
     ROUND(sumrate/votes) AS average 
FROM catalog c LEFT JOIN 
    (SELECT r.object_id, COUNT(*) as votes, SUM(r.rate) as sumrate 
     FROM ratings r 
     GROUP BY r.object_id 
    ) r 
    ON r.object_id = c.catalog_id LEFT JOIN 
    (SELECT c.catalog_id, COUNT(*) as total_comments 
     FROM comments c 
     GROUP BY c.catalog_id 
    ) c 
    ON c.catalog_id = c.catalog_id 
GROUP BY c.catalog_id 
ORDER BY average DESC, votes DESC; 
관련 문제