作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的查询不起作用,我不明白为什么。
每个 SELECT 语句都应返回降序结果,但它们是按升序排列的。为什么?
(SELECT * FROM table WHERE deleted_at = 0 ORDER BY id DESC)
UNION ALL
(SELECT * FROM table WHERE deleted_at <> 0 ORDER BY id DESC)
LIMIT 0,30
我不得不说,这个查询不会产生任何错误,结果也是我所期望的。它们只是没有很好地排序。
最佳答案
使用子查询时不保证顺序。如果您希望结果按 id 降序排序,请使用:
(SELECT * FROM table WHERE deleted_at = 0)
UNION ALL
(SELECT * FROM table WHERE deleted_at <> 0)
order by id desc
LIMIT 0,30;
但是,我认为您真正想要的查询是:
select *
from table
order by deleted_at = 0 desc, id desc
limit 0, 30;
这会将 deleted_at = 0
行放在前面,然后用其余数据填充该数据。
注意:如果 deleted_at
可以为 NULL,并且您也想将其过滤掉,那么请添加一个 where
子句来进行此过滤。
关于mysql - 同时 UNION ALL 和 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20670172/
我是一名优秀的程序员,十分优秀!