SQL Order按字符串列表?

Tik*_*keb 25 mysql sql

我希望在表格上进行选择,并按特定关键字或关键字列表对结果进行排序.例如,我有一个像这样的表:

ID  Code
1   Health
2   Freeze
3   Phone
4   Phone
5   Health
6   Hot
Run Code Online (Sandbox Code Playgroud)

所以,而不仅仅是做一个简单的Order By asc/desc我想order by Health, Phone, Freeze, Hot.这可能吗?

sha*_*nuo 49

试试这个:

select * from table 
order by FIELD(Code, 'Health', 'Phone', 'Freeze', 'Hot')
Run Code Online (Sandbox Code Playgroud)

  • 根据文档(评论部分),这是正确的解决方案.可以在[这里]找到一个很好的解释(http://www.electrictoolbox.com/mysql-order-specific-field-values/) (3认同)
  • 请注意,FIELD()函数特定于MySQL,可能无法在其他SQL数据库服务器上运行. (3认同)

Jes*_*sen 12

您可以使用关键字表加入,并包含序列列和ORDER BY Keyword.Sequence.

关键字表的示例如下所示:

ID  Code     Sequence
1   Health   1 
2   Freeze   3
3   Phone    2
4   Hot      4
Run Code Online (Sandbox Code Playgroud)

然后你可以加入.

SELECT *
FROM   MyTable INNER JOIN
          Keywords ON Keywords.ID = MyTable.KeywordID
ORDER BY Keywords.Sequence
Run Code Online (Sandbox Code Playgroud)

希望这会给你一个想法.


Blo*_*ard 12

这是一个可怕的黑客:

select * from table
order by (
     case Code 
     when 'Health' then 0 
     when 'Phone' then 1
     when 'Freeze' then 2
     when 'Hot' then 3
     end
)
Run Code Online (Sandbox Code Playgroud)

  • 我同意"可怕的黑客"部分;-) (8认同)

小智 5

现在MySQL有一个函数叫find_in_set()

像这样使用它:

select * from table 
order by find_in_set(Code,'Health','Phone','Freeze','Hot')
Run Code Online (Sandbox Code Playgroud)