我正在创建一个 View ,以便显示过去 2 天内 HitTest 门的问题。 但由于我们的事件不多,因此仅显示 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 个结果,需要添加其他 932 个结果,只需说 SELECT * FROM production.question 或其他什么...)
最佳答案
您可以通过将 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
的任何内容,只会影响记录的“其余”部分。
关于如果结果小于数字,MYSQL如何添加更多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18812448/