0

我正在创建一个视图,以便显示过去 2 天内最热门的问题。但是因为我们没有很多活动,所以它只显示了 68 个项目。我想为这个语句添加一种方式,如果结果少于 1000 项,则添加剩余的项,而不用担心排名。

1000 个结果 = 68 个热门,932 个常客

SELECT *, ((likesCount*.8)+(commentsCount*.6)+(sharesCount*1)/2.4) as wavg
FROM production.question
    JOIN production.feed
    ON production.question.id = production.feed.q_id
    WHERE (production.feed.timestamp >= (now() - interval 2 day))
GROUP BY production.question.name
ORDER BY wavg DESC
LIMIT 0,1000;

(只返回 68 个结果,需要通过说 SELECT * FROM production.question 或其他任何内容来添加其他 932 个......)

4

1 回答 1

2

where您可以通过将条件移动到order by子句中来做您想做的事情。所以,先按你想要的数据排序,然后把其余的。

以下查询还将 替换为joinleft join并在 中包含第二个表的匹配项order by

SELECT *, ((likesCount*.8)+(commentsCount*.6)+(sharesCount*1)/2.4) as wavg
FROM production.question q LEFT JOIN
     production.feed f
     ON q.id = f.q_id
GROUP BY q.name
ORDER BY (f.timestamp >= (now() - interval 2 day)) desc,
         (f.q_id is not null) desc,
         wavg DESC
LIMIT 0,1000;

它还使用表别名使查询更具可读性。

编辑:

随机化最后的问题:

ORDER BY (f.timestamp >= (now() - interval 2 day)) desc,
         wavg DESC,
         rand()
LIMIT 0,1000;

这不会影响wavg定义的任何内容,只会影响记录的“其余部分”。

于 2013-09-15T12:44:00.547 回答