我正在使用以下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

FIND_IN_SET:
  SELECT *
    FROM cms_product
   WHERE id IN (3,22,1)
ORDER BY FIND_IN_SET(id, '3,22,1');

field :
  SELECT *
    FROM cms_product
   WHERE id IN (3,22,1)
ORDER BY FIELD(id, 3, 22, 1);

引用:
  • CASE
  • FIELD
  • FIND_IN_SET
  • 关于sql - “WHERE field IN” SQL查询的顺序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4011056/

    10-16 13:30