“的顺序”;“中的WHERE字段”;SQL查询?
我使用以下SQL从MySQL数据库中选择记录:“的顺序”;“中的WHERE字段”;SQL查询?,sql,mysql,sql-order-by,Sql,Mysql,Sql Order By,我使用以下SQL从MySQL数据库中选择记录: SELECT * FROM cms_product WHERE id IN (3,22,1); 结果顺序等于“order BY id ASC”,因此在示例中返回记录1、3、22。我怎样才能按照条款中输入的确切方式订购?按3,22,1的顺序排列?多谢各位 您不能,它必须是ASC或DESC。它可能不是很整洁,但您可能需要执行以下操作: SELECT * FROM cms_product WHERE id IN (3, 22
SELECT * FROM cms_product WHERE id IN (3,22,1);
结果顺序等于“order BY id ASC”,因此在示例中返回记录1、3、22。我怎样才能按照条款中输入的确切方式订购?按3,22,1的顺序排列?多谢各位 您不能,它必须是ASC或DESC。它可能不是很整洁,但您可能需要执行以下操作:
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)
更新:
。。。按字段排序(id、3、22、1)
如所建议,并返回相同的结果,实际上更整洁。尝试使用按字段排序,例如:
SELECT * FROM cms_product WHERE id IN (3,22,1) ORDER BY FIELD (id, 3, 22, 1);
按字段排序(id
,'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
在\u集合中查找\u:
字段:
参考:
考虑找其他东西来订购您的记录。应该允许ID是变化的或非静态的。可能的副本非常可疑,但这将扩展到一个很长的列表中。哦,实际文档。我不记得在我的阅读中遇到过这个问题,所以谢谢你的链接:)
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);