select 1 id, 'Zeta' order_col union all
select 2 id, 'Alpha' order_col union all
select 3 id, 'Gamma' order_col union all
select 4 id, 'Phi' order_col union all
select 5 id, 'Delta' order_col union all
select 6 id, 'Delta' order_col union all
select 7 id, 'Alpha' order_col union all
select 8 id, 'Gamma' order_col union all
select 9 id, 'Zeta' order_col union all
select 10 id, 'Phi' order_col
order by field (order_col, 'Alpha', 'Gamma', 'Phi', 'Delta', 'Zeta'), id;
7条答案
按热度按时间ogsagwnx1#
这有点难看,因为它有代码重复,但它做到了:
xjreopfe2#
你可以用
field()
在mysql中。field()中的第一个参数表示要排序的字段,其余的是排序。
所以5将首先排序,其余的从id排序(没有5)。你可以这样做
field(id,5,1,3,id)
如果你想让5,1,3排在前面。最后可以选择5个进行排序
field(id,id,5)
. 第二个id也会将5排除在外。uqcuzwp83#
如果要对联合查询执行相同的操作,例如:
... 在postgresql中会出现一个异常:
只能使用结果列名,不能使用表达式或函数。提示:将表达式/函数添加到每个select,或将union移到from子句中
为了解决这个问题,您可以使用以下方法:
表达式(id=5)将返回“t”或“f”,这取决于列值是否等于预期值(5),因此order by将首先对“t”列排序,然后对其余列排序。
of1yzvn44#
您应该使用mysql的orderbyfield子句来解决这个问题。虽然,这个问题的答案已经被接受,但这里有一个更好的解决方案。
这比
id=某物,按id排序asc
按大小写排序,然后是1,然后是2,结束描述
ve7v8dk25#
试试这个:
如果你有一个以上,你可以做:
u91tlkcl6#
(假设您不关心其余部分的顺序,否则,例如,rest by id asc)
flvlnr447#
我现在无法访问mysql进行测试,所以它可能会被反转。。。但是你可以利用布尔值也可以排序的事实,你可以有几个排序字段。
(你可能得写信。)
id = 5
,我记不清trues是在false之前还是之后排序。)编辑:哦,我刚读到你不在乎剩下的顺序,在这种情况下,我衷心推荐@richard的答案。