Mysql 在其中读取的顺序结果。在()中使用

Mysql 在其中读取的顺序结果。在()中使用,mysql,sorting,Mysql,Sorting,这是我在mysql中的查询: SELECT school_id, first_name, last_name, email, blog_username, comment_username FROM table WHERE user_id IN (100, 3,72) ; 结果按升序显示两个用户id。我怎样才能使它成为由接收的用户订购的 因此,我希望结果是100,3,72,而不是3,72 Select school_id, first_name, last_name, email, b

这是我在mysql中的查询:

SELECT school_id, first_name, last_name, email, blog_username, comment_username
FROM   table 
WHERE  user_id IN (100, 3,72) ;
结果按升序显示两个用户id。我怎样才能使它成为由接收的用户订购的

因此,我希望结果是
100,3,72
,而不是
3,72

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

MySQL有一个函数
FIELD()
,适用于以下情况:

ORDER BY FIELD(user_id, 100, 3, 72 )

通常情况下(该方法是为
字符串设计的,但它对数字的处理效果很好)

然而

  • 这会降低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)

尽管我会考虑更改其余代码,这样就不必使用这个方法。

您可以扩展这个解决方案如何和为什么来解决这个问题?@ DeNoMales -完成了。本质上,我使用Case表达式来计算值的新基数。Case表达式充当转换,将值列表转换为其基数值。谢谢!工作完美
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)