2013-04-05 2 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

Спасибо за ваш ответ Марк - однако я не мог получить эту работу; он возвращал пустой ряд без всякой необходимой информации. Однако мне удалось использовать ответ Фтиеллы. –

Смежные вопросы