我有一个查询,该查询从数据库的视图顺序中选择*,并限制为4:
SELECT * FROM articles WHERE visible = 1 ORDER BY views LIMIT 4;
但是在同一查询中,我想查找所有其他按列updated_at排序的行。
我试过像这样的东西,但是不起作用:
(SELECT * FROM articles ORDER BY views DESC LIMIT 4)
UNION
(SELECT * FROM articles ORDER BY updated_at DESC);
提议这是“固定”主页上最热门的4篇文章,然后按时间排序。
有什么办法可以在同一查询中以多种方式进行ORDER,而无需重复行?
我怎样才能做到这一点?
从MySQL文档:
... UNION的默认行为是从结果中删除重复的行。...
和
...如果ORDER BY在SELECT中没有LIMIT出现,则将对其进行优化,因为它始终无效。...
因此,这里的技巧是limit
在第二个查询中使用(由您来选择限制):
(SELECT * FROM articles WHERE visible = 1 ORDER BY views DESC LIMIT 4)
UNION
(SELECT * FROM articles WHERE visible = 1 ORDER BY updated_at DESC LIMIT 100);
该查询已在MySQL 5.6和5.7中进行了测试。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句