"WHERE字段IN"SQL查询的顺序?

Sur*_*rla 5 mysql sql sql-order-by

我使用以下SQL从MySQL数据库中选择记录:

SELECT * FROM cms_product WHERE id IN (3,22,1);
Run Code Online (Sandbox Code Playgroud)

结果顺序等于"ORDER BY id ASC",因此在示例中返回记录1,3,22.如何以IN子句中输入的确切方式对它们进行排序?订购为3,22,1?谢谢.

OMG*_*ies 7

众多选择 -

案件:

首选,是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
Run Code Online (Sandbox Code Playgroud)

FIND_IN_SET:

  SELECT * 
    FROM cms_product 
   WHERE id IN (3,22,1)
ORDER BY FIND_IN_SET(id, '3,22,1');
Run Code Online (Sandbox Code Playgroud)

领域:

  SELECT * 
    FROM cms_product 
   WHERE id IN (3,22,1)
ORDER BY FIELD(id, 3, 22, 1);
Run Code Online (Sandbox Code Playgroud)

参考:


小智 6

尝试使用ORDER BY FIELD,例如:

SELECT * FROM cms_product WHERE id IN (3,22,1) ORDER BY FIELD (id, 3, 22, 1);
Run Code Online (Sandbox Code Playgroud)

来源于此

  • +1 http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_field (2认同)