一尘不染

MySQL按列表排序

mysql

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

我有一个带有列id和的mysql表name,其中id是整数主键。我想从该表中选择的记录,但在一个特定的顺序,例如713212355

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

阅读 378

收藏
2020-05-17

共1个答案

一尘不染

由于1 < 3 < 77 < 123,一个简单ORDER BY id就足够了。

但是,如果您要这样订购:77, 3, 123, 1,则可以使用function
FIELD()

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

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

FIELD返回0时,行不匹配任何您列表中的ID,比上市的IDS返回的数字越小,即一些。这意味着,如果查询匹配的行多于列出的行,则这些行将首先显示。例如:

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
2020-05-17