MySQL按一些列表排序

时间:2011-07-25 00:44:01

标签: php mysql

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

我有一个包含colums idname的mysql表,其中id是一个整数主键。 我想从此表中选择记录,但是按特定顺序,例如7132123,{{1 }}

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

1 个答案:

答案 0 :(得分:56)

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)

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

中列出的行数 当某行与您列出的任何ID不匹配时,

FIELD会返回0,即小于列出的ID返回的数字。这意味着,如果您的查询匹配的行数多于您列出的行数,那么这些行将首先显示。例如:

SELECT id, name
FROM mytable 
WHERE id IN (77, 3, 123, 1, 400) 
ORDER BY FIELD(id, 77, 3, 123, 1)

在此示例中,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