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

时间:2010-02-11 16:34:40

标签: sql mysql database sql-order-by

考虑这个MySQL查询:

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

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

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

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

2 个答案:

答案 0 :(得分:9)

在ORDER BY中使用CASE语句:

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

根据需要分配任意值。我通常不会在ASC中包含ORDER BY,因为如果没有定义则会隐含,但我希望在DESC命令中明确表示。

答案 1 :(得分:1)

不,订单无法保证 - 或者说,它将是所选行在数据库中出现的顺序。

如果您知道这些值属于严格集,则可以使该列成为具有所需顺序的ENUM类型,并且对该字段的排序将按该顺序排序。

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

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