SQL Order按字符串列表?

时间:2009-08-07 10:28:18

标签: sql mysql

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

ID  Code
1   Health
2   Freeze
3   Phone
4   Phone
5   Health
6   Hot

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

8 个答案:

答案 0 :(得分:49)

尝试使用:

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

答案 1 :(得分:12)

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

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

ID  Code     Sequence
1   Health   1 
2   Freeze   3
3   Phone    2
4   Hot      4

然后你可以加入。

SELECT *
FROM   MyTable INNER JOIN
          Keywords ON Keywords.ID = MyTable.KeywordID
ORDER BY Keywords.Sequence

希望这会给你一个想法。

答案 2 :(得分:11)

这是一个可怕的黑客:

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

答案 3 :(得分:4)

现在MySQL有一个名为find_in_set()

的函数

像这样使用:

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

答案 4 :(得分:3)

情侣选择:

  1. 使用数字添加OrderCode列 期望的订单

  2. 将具有FK的表添加到此表ID 和OrderCode

答案 5 :(得分:3)

这只是一个关闭ORDER BY或者你想要经常做的事情以及比这里指定的更多的值吗?

您提供的顺序是任意的,因此需要提供标识符以实现您想要的目标

SELECT 
    ID,
    Code,
    CASE Code
        WHEN 'Health' THEN 1
        WHEN 'Phone' THEN 2
        WHEN 'Freeze' THEN 3
        WHEN 'Hot' THEN 4
    END As OrderBy
FROM Table
ORDER BY 
    OrderBy

或者

SELECT 
    ID,
    Code
FROM Table
ORDER BY 
    CASE Code
        WHEN 'Health' THEN 1
        WHEN 'Phone' THEN 2
        WHEN 'Freeze' THEN 3
        WHEN 'Hot' THEN 4
    END

(我不熟悉MySQL,但上面的内容适用于SQL Server.MySQL的语法也不会太差异)

如果您可能想要经常这样做,那么在表上创建一个OrderBy列,或者创建一个带有该表的FK链接的OrderBy表,并在其中指定一个OrderBy数字字段。

答案 6 :(得分:3)

您好这是一个SQL Server查询,但我相信您也可以在MySQL中执行此操作:

SELECT ID,  Code
FROM x
ORDER BY 
     CASE Code WHEN 'Health' THEN 1
               WHEN 'Phone' THEN 2
               WHEN 'Freeze' THEN 4
               WHEN 'Hot' THEN 5
     ELSE 6 END ASC
     , Code ASC

答案 7 :(得分:1)

是,将您的结果加入代码表,然后按 code.CodeOrder

订购

编辑:解释代码表的使用......

创建一个单独的代码表(CodeId,Code,CodeOrder)并加入此代码并由CodeOrder订购。这比通过(case ...)hack建议订单更好,因为你可以轻松更改代码和订单。