读取它的结果。使用in()

时间:2013-08-15 15:24:23

标签: mysql sorting

这是我在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

2 个答案:

答案 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, ... )

然而

  • 它使您的SQL不那么便携
  • 这样的订购效率低得多

整个代码

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)

虽然我会考虑更改其余的代码,因此您不必使用此方法。