![](/img/trans.png)
[英]sort result of sql query by order of field in where clause of query
[英]Order of “WHERE field IN” SQL query?
我使用以下SQL从MySQL数据库中选择记录:
SELECT * FROM cms_product WHERE id IN (3,22,1);
结果顺序等于“ORDER BY id ASC”,因此在示例中返回记录1,3,22。 如何以IN子句中输入的确切方式对它们进行排序? 订购为3,22,1? 谢谢。
众多选择 -
首选,是ANSI-92,它可以移植到其他数据库。
SELECT *
FROM cms_product
WHERE id IN (3,22,1)
ORDER BY CASE id
WHEN 3 THEN 1
WHEN 22 THEN 2
WHEN 1 THEN 3
END
SELECT *
FROM cms_product
WHERE id IN (3,22,1)
ORDER BY FIND_IN_SET(id, '3,22,1');
SELECT *
FROM cms_product
WHERE id IN (3,22,1)
ORDER BY FIELD(id, 3, 22, 1);
参考:
尝试使用ORDER BY FIELD
,例如:
SELECT * FROM cms_product WHERE id IN (3,22,1) ORDER BY FIELD (id, 3, 22, 1);
它可能不是很整洁,但您可能想要执行以下操作:
SELECT *
FROM cms_product
WHERE id IN (3, 22, 1)
ORDER BY id = 3 DESC, id = 22 DESC, id = 1 DESC;
测试用例:
CREATE TABLE cms_product (id int, value int);
INSERT INTO cms_product VALUES (1, 100);
INSERT INTO cms_product VALUES (3, 200);
INSERT INTO cms_product VALUES (22, 300);
结果:
+------+-------+
| id | value |
+------+-------+
| 3 | 200 |
| 22 | 300 |
| 1 | 100 |
+------+-------+
3 rows in set (0.02 sec)
更新:
按照@Dave和@OMG Ponies的建议, ... ORDER BY FIELD (id, 3, 22, 1)
3,22,1)返回相同的结果,实际上更整洁。
你不能,它必须是ASC或DESC。
ORDER BY FIELD( id
,'3','22','1')???
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.