我有一列状态,并且,根据查询,我想按结果按特定状态排序,然后按id(Asc或Desc,取决于)排序 . 例如,我可能希望显示状态为“HI”的所有行,按ID desc排序,然后按ID desc排序所有其他行 .
我希望我可以在一个查询中执行此操作,而不是获得所有我喜欢的状态结果,然后完成剩下的工作 . 我可以吗?
你有两个选择:
做一个工会
编写一个函数并使用它来排序
在第一种情况下,你可以做类似的事情
select 1 as res_order, ... ... where state like 'hi%' union select 2 as res_order, ... ... where state not like 'hi%' order by res_order asc, id desc
在第二种情况下,你可以做类似的事情
select my_function(state, "hi") as row_order, ... ... order by row_order
其中函数返回匹配状态的较低值 .
代码是我的头脑:它可能需要一些调整才能使它可以运行 .
怎么样:
SELECT id, state FROM sometable ORDER BY IF(state = 'HI', 0, 1) ASC, id DESC;
这将首先排序'HI'行 . 如果您需要它们,请将ASC更改为DESC .
2 回答
你有两个选择:
做一个工会
编写一个函数并使用它来排序
在第一种情况下,你可以做类似的事情
在第二种情况下,你可以做类似的事情
其中函数返回匹配状态的较低值 .
代码是我的头脑:它可能需要一些调整才能使它可以运行 .
怎么样:
这将首先排序'HI'行 . 如果您需要它们,请将ASC更改为DESC .