我有下表
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;
然后我尝试根据主键获取记录
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可以是可变长度的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)