0

次のクエリがあります。

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

次の方法で計算される 3 番目の列に従って結果を並べ替えます。

order = comments * 6 + likes * 4

この「仮想」列を作成し、他の 2 つの結果を計算に使用するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

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
于 2013-04-05T16:51:32.570 に答える
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`
于 2013-04-05T16:53:33.823 に答える