代码之家  ›  专栏  ›  技术社区  ›  Decent Dabbler

基于WHERE IN子句数据排序结果集

  •  4
  • Decent Dabbler  · 技术社区  · 15 年前

    考虑到这个mysql查询:

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

    …我如何保证行集按给定值的确切顺序排列 IN () 条款?我想如果不给它一个 ORDER BY 子句,是吗?

    PS.:
    价值观 在() 子句将是由php(利用zend framework的select语句)以以下方式传递给查询的任意数据数组:

    ->where( 'someColumn in (?)', $theArrayWithValues );
    
    2 回复  |  直到 15 年前
        1
  •  9
  •   OMG Ponies    15 年前

    按以下顺序使用case语句:

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

    根据需要分配任意值。我通常不包括 ASC 在里面 ORDER BY 因为它是隐含的,如果没有定义,但我想明确,以防你想 DESC 秩序。

        2
  •  1
  •   DisgruntledGoat    15 年前

    不,不保证顺序—或者更确切地说,它将是所选行在数据库中的显示顺序。

    如果您知道这些值将属于一个严格的集合,那么您可以使用所需的顺序使列成为枚举类型,并且在此字段上排序将按该顺序排序。

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

    ORDER BY `someColumn`='value1' DESC, `someColumn`='value2' DESC, ...
    
    推荐文章