我有下表

DROP TABLE IF EXISTS `test`.`foo`;
CREATE TABLE  `test`.`foo` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(45) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

然后我try 根据主键获取记录

SELECT * FROM foo f where f.id IN (2, 3, 1);

然后我得到以下结果

+----+--------+
| id | name   |
+----+--------+
|  1 | first  |
|  2 | second |
|  3 | third  |
+----+--------+
3 rows in set (0.00 sec)

可以看到,结果是按id排序的.我试图实现的是按照我在查询中提供的顺序对结果进行排序.给出这个例子,它应该返回

+----+--------+
| id | name   |
+----+--------+
|  2 | second |
|  3 | third  |
|  1 | first  |
+----+--------+
3 rows in set (0.00 sec)

推荐答案

正如另一个答案提到的:你发布的查询与你希望结果的顺序无关,只与你希望得到的结果有关.

为了获得结果,我将使用ORDER BY FIELD():

SELECT * FROM foo f where f.id IN (2, 3, 1)
ORDER BY FIELD(f.id, 2, 3, 1);

参数列表到FIELD可以是可变长度的.

Mysql相关问答推荐

MySQL连接序列

在停靠容器中备份和恢复MySQL数据库时出现Unicode字符问题

为什么我的带有索引字段和非索引字段的 Select 有时需要很长时间

使用NOT EXISTS()时出现MySQL查询错误

MySQL Group by或Distinct in Window函数

如何查询一行

获取最大登录应用程序用户数以及何时

在MySQL的join查询中进行计算

带有 JOIN 和 WHERE 子句的 INSERT 语句

将递归 CTE 结果合并到辅助 SQL Select

SQL 查询仅当成员共享确切值时才 Select 成员对

根据单个日期字段获取范围/天数

查找同时玩过这两种游戏的玩家

更改整数时间到日期格式 MM/DD/YY,如 python 中的 datetime.fromtimestamp

SQL UPDATE中的str_replace?

MYSQL:创建表中的索引关键字以及何时使用它

从mysql中的大表中快速 Select 随机行

使用 mysql 处理非常大的数据

在 MySQL 中找不到 outfile 创建的文件

MySQL:ALTER IGNORE TABLE 给出违反完整性约束