根据 WHERE IN 子句数据排序结果集
Posted
技术标签:
【中文标题】根据 WHERE IN 子句数据排序结果集【英文标题】:Order resultset based on WHERE IN clause data 【发布时间】: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 );
【问题讨论】:
【参考方案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, ...
【讨论】:
以上是关于根据 WHERE IN 子句数据排序结果集的主要内容,如果未能解决你的问题,请参考以下文章
用于返回结果集的 where 子句中的 case 语句包含空值