我有一个数字列表:7,1,3,2,123,55
(这是现有记录的ID)
我有一个包含colums id
和name
的mysql表,其中id
是一个整数主键。
我想从此表中选择记录,但是按特定顺序,例如7
,1
,3
,2
,123
,{{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
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