我有一个数字列表:(7,1,3,2,123,55这是现有记录的ID)
7,1,3,2,123,55
我有一个带有列id和的mysql表name,其中id是整数主键。我想从该表中选择的记录,但在一个特定的顺序,例如7,1,3,2,123,55。
id
name
7
1
3
2
123
55
由于1 < 3 < 77 < 123,一个简单ORDER BY id就足够了。
1 < 3 < 77 < 123
ORDER BY id
但是,如果您要这样订购:77, 3, 123, 1,则可以使用function FIELD() :
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
FIELD
FIELD返回0时,行不匹配任何您列表中的ID,比上市的IDS返回的数字越小,即一些。这意味着,如果查询匹配的行多于列出的行,则这些行将首先显示。例如:
0
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:
400
DESC
SELECT id, name FROM mytable WHERE id IN (77, 3, 123, 1, 400) ORDER BY FIELD(id, 1, 123, 3, 77) DESC