【问题标题】:Order resultset based on WHERE IN clause data根据 WHERE IN 子句数据排序结果集
【发布时间】:2010-02-11 16:34:40
【问题描述】:

考虑这个 MySQL 查询:

SELECT
  someColumns
FROM
  someTable
WHERE
  someColumn IN ( value1, value2, value3 )

...我如何保证行集按照IN () 子句给出的值的确切顺序排序?我认为如果不给它一个ORDER BY 子句,这不能保证,是吗?

PS:
IN () 子句的值将是由 PHP(利用 Zend Framework 的 select 语句)以下列方式传递给查询的任意数据数组:

->where( 'someColumn in (?)', $theArrayWithValues );

【问题讨论】:

    标签: sql mysql database sql-order-by


    【解决方案1】:

    在 ORDER BY 中使用 CASE 语句:

    ORDER BY CASE someColumn
               WHEN value1 THEN 1
               WHEN value2 THEN 2
               WHEN value3 THEN 3
             END ASC
    

    根据需要分配任意值。我通常不会在ORDER BY 中包含ASC,因为如果未定义它是隐含的,但我想明确说明,以防您想在DESC 顺序中。

    【讨论】:

    • 像魅力一样工作。谢谢。
    • 巧妙!谢谢!
    【解决方案2】:

    不,不能保证顺序 - 或者更确切地说,它将是所选行在数据库中出现的顺序。

    如果您知道这些值将属于一个严格的集合,您可以按照您想要的顺序将该列设为 ENUM 类型,并且对该字段的排序将按该顺序排序。

    按特定值排序的一种简单方法是:

    ORDER BY `someColumn`='value1' DESC, `someColumn`='value2' DESC, ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      相关资源
      最近更新 更多