我有一个非常简单的SQL查询,但缺少一些东西,我还没有找到这个问题的答案。 问题是我选择了一些带有几个id的字段,我希望按照这个特定的顺序对结果进行排序。
查询如下
SELECT `content`.*
FROM `content`
WHERE (user_id = "1" AND ( id = "4" OR id = "7" OR id = "5" OR id = "8" ))
默认顺序是“id ASC”(id是我的主键),但我希望在这种特殊情况下订单为4,7,5,8。
有什么想法吗?
答案 0 :(得分:10)
ORDER BY CASE user_id WHEN "4" THEN 1 WHEN "7" THEN 2 WHEN "5" THEN 3 WHEN "8" THEN 4 ELSE 5 END
如果要概括它,可以创建一个包含两列的新表 - “user_id”和“order_by_val”,加入它,以及“ORDER BY order_by_val”。
<小时/> 编辑:Per @Tim,MySQL有一个专有函数 - FIELD() - 正如他在帖子中所提到的,如果你不关心可移植性,或者函数返回值是不可优化的问题。
答案 1 :(得分:5)
这将做你想要的:
select *
from myTable
order by field(myID, 8, 7, 6) desc;
您可以设置您想要显示的任何ID(或其他)的顺序,之后其他任何ID都会跟随。希望有所帮助。
有关此问题的更多内容@ http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_field
答案 2 :(得分:3)
我通常采用这种奇怪的排序方式是使用一个案例陈述:
order by case id
when "4" then 1
when "7" then 2
when "5" then 3
when "8" then 4
else 99
end
不确定这是否直接转换为mysql,但这个想法应该。
答案 3 :(得分:1)
ORDER BY CASE id WHEN 4 THEN 1
WHEN 7 THEN 2
WHEN 5 THEN 3
WHEN 8 THEN 4
ELSE 99
END;
答案 4 :(得分:0)
您可以尝试在查询结尾添加以下内容。
ORDER BY CASE ID WHEN 4 THEN 1 WHEN 7 THEN 2 WHEN 5 THEN 3 WHEN 8 THEN 4 ELSE 5 END