如果结果小于数字,MYSQL如何添加更多行

时间:2013-09-15 12:37:26

标签: mysql sql

我正在制作一个视图,以便在过去两天内显示最受欢迎的问题。 但是因为我们没有很多活动,所以它只显示了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)。

1 个答案:

答案 0 :(得分:2)

您可以通过将where条件移动到order by子句中来执行您想要的操作。因此,首先按照您想要的数据排序,然后完成其余的数据。

以下查询还将join替换为left 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的任何内容,只影响记录的“其余”。