这是我在mysql中的查询:
SELECT school_id, first_name, last_name, email, blog_username, comment_username
FROM table
WHERE user_id IN (100, 3,72) ;
结果显示两个user_id按升序排列。我怎样才能使它按照收到的顺序排列?
因此我希望结果不是3, 72, 100
100, 3, 72
。
答案 0 :(得分:2)
Select school_id, first_name, last_name, email, blog_username, comment_username
From table
Where user_id IN ( 100, 3, 72 )
Order By Case
When user_id = 100 Then 1
When user_id = 3 Then 2
When user_id = 72 Then 3
End Asc
补充说明:
正在寻求的是以自定义方式订购行的能力。换句话说,我们需要将自定义基数添加到一组不符合标准基数的值。 Case表达式可以用来做到这一点。另一种完成同样事情的方法是:
Select school_id, first_name, last_name, email, blog_username, comment_username
From table
Join (
Select 100 As user_id, 1 As Sort
Union All Select 3, 2
Union All Select 72, 3
) As Seq
On Seq.user_id = table.user_id
Order By Seq.Sort
答案 1 :(得分:0)
MySQL有一个适用于此的函数FIELD()
:
ORDER BY FIELD(user_id, 100, 3, 72 )
http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_field
并且一般来说(方法是为strings
设计的,但它可以正常使用数字)
ORDER BY FIELD(field_name, value_1, value_2, ... )
然而
整个代码
SELECT school_id, first_name, last_name, email, blog_username, comment_username
FROM table
WHERE user_id IN (100, 3, 72)
ORDER BY FIELD(user_id, 100, 3, 72)
虽然我会考虑更改其余的代码,因此您不必使用此方法。