我希望在表格上进行选择,并按特定关键字或关键字列表对结果进行排序。例如,我有一个像这样的表:
ID Code
1 Health
2 Freeze
3 Phone
4 Phone
5 Health
6 Hot
所以不要只做一个简单的Order By asc/desc
我想要order by Health, Phone, Freeze, Hot
。这可能吗?
答案 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)
情侣选择:
使用数字添加OrderCode列 期望的订单
将具有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建议订单更好,因为你可以轻松更改代码和订单。