考虑这个MySQL查询:
SELECT
someColumns
FROM
someTable
WHERE
someColumn IN ( value1, value2, value3 )
...我怎样才能保证行集按照IN ()
子句赋值的确切顺序排序?我认为如果不给它一个ORDER BY
子句就不能保证这个,是吗?
PS:
IN ()
子句的值将是由PHP(使用Zend Framework的select语句)以下列方式传递给查询的任意数据的数组:
->where( 'someColumn in (?)', $theArrayWithValues );
答案 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, ...