2013-04-05 3 views
0

나는 다음과 같은 쿼리를 가지고 :MySQL의 주문 결과

SELECT 
    p.`ID`, 
    (SELECT COUNT(`ID`) FROM `comments` c WHERE c.`post_id` = p.`ID`) AS `comments`, 
    (SELECT COUNT(`ID`) FROM `likes` l WHERE l.`post_id` = p.`ID`) AS `likes` 
FROM `posts` p 

나는 다음과 같은 방법으로 계산됩니다 세 번째 열,에 따라 결과를 정렬하려면 :

order = comments * 6 + likes * 4 

을 이 "가상"열을 만들고 다른 두 결과를 계산에 사용하려면 어떻게해야합니까?

감사합니다.

답변

1

나는 이런 식으로 쿼리를 다시 작성 것이다 : 당신의 대답 마크에 대한

SELECT 
    p.ID, 
    COUNT(DISTINCT comments.ID) as comments, 
    COUNT(DISTINCT likes.ID) as likes, 
    COUNT(DISTINCT comments.ID)* 6 + COUNT(DISTINCT likes.ID)* 4 as `order` 
FROM 
    posts p LEFT JOIN comments on p.id = comments.post_id 
    LEFT JOIN likes` ON likes.`post_id` = p.`ID` 
GROUP BY 
    p.ID 
ORDER BY 
    `order` 
+0

감사합니다. 이것은 완벽하게 작동했습니다 :) –

3
SELECT p.ID, comments, likes, (comments * 6) + (likes * 4) AS ordering 
FROM (

    SELECT 
     p.`ID`, 
     (SELECT COUNT(`ID`) FROM `comments` c WHERE c.`post_id` = p.`ID`) AS `comments`, 
     (SELECT COUNT(`ID`) FROM `likes` l WHERE l.`post_id` = p.`ID`) AS `likes` 
    FROM `posts` 
) AS p 
ORDER BY ordering 
+0

감사합니다 - 그러나 나는이 작업을 가져올 수 없습니다; 필요한 모든 정보없이 빈 행을 반환했습니다. 나는 fthiella의 대답을 사용할 수 있었다. –