通过任意字母对MYSQL结果进行排序的方法(即,首先显示以F开头的所有行)

时间:2010-03-19 14:09:40

标签: mysql sorting

我有一列状态,并且,根据查询,我想按特定状态的结果排序,然后按id(Asc或Desc,取决于)排序。例如,我可能希望显示状态为“HI”的所有行,按ID desc排序,然后显示所有其他行,按id desc排序。

我希望我能在一个查询中执行此操作,而不是获得所有我喜欢的状态结果,然后完成剩下的工作。我可以吗?

2 个答案:

答案 0 :(得分:1)

您有两种选择:

  • 做一个工会
  • 编写一个函数并使用它来按行排序

在第一种情况下,您可以执行类似

的操作
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

其中函数返回匹配状态的较低值。

代码不在我的脑海中:可能需要进行一些调整以使其可以运行。

答案 1 :(得分:1)

怎么样:

SELECT id, state
FROM sometable
ORDER BY IF(state = 'HI', 0, 1) ASC, id DESC;

这将首先排序'HI'行。如果你想要它们,请将ASC更改为DESC。