Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“的顺序”;“中的WHERE字段”;SQL查询?_Sql_Mysql_Sql Order By - Fatal编程技术网

“的顺序”;“中的WHERE字段”;SQL查询?

“的顺序”;“中的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

我使用以下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, 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);