MySQL按一些列表排序

pub*_*com 20 php mysql

我有一个数字列表:( 7,1,3,2,123,55这是现有记录的ID)

我与colums一个MySQL表idname,其中id是一个整数主键.我想从该表中选择的记录,但在一个特定的顺序,例如7,1,3,2,123,55.

  • 是否可以在查询中的MyISAM中执行此操作,而无需任何后期处理?
  • 最简单的方法是什么?

ype*_*eᵀᴹ 60

因为1 < 3 < 77 < 123,简单ORDER BY id就足够了.

但是,如果您想以这种方式订购:77, 3, 123, 1那么您可以使用以下功能FIELD():

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1) 
ORDER BY FIELD(id, 77, 3, 123, 1)
Run Code Online (Sandbox Code Playgroud)

如果您的查询匹配的行数多于列出的行数 FIELD

FIELD0当行与您列出的任何ID不匹配时返回,即小于列出的ID返回的数字.这意味着,如果您的查询匹配的行数多于您列出的行数,那么这些行将首先显示.例如:

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1, 400) 
ORDER BY FIELD(id, 77, 3, 123, 1)
Run Code Online (Sandbox Code Playgroud)

在此示例中,具有ID的400行将首先出现.如果您希望这些行显示在最后,只需反转ID列表并添加DESC:

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1, 400) 
ORDER BY FIELD(id, 1, 123, 3, 77) DESC
Run Code Online (Sandbox Code Playgroud)