【发布时间】:2011-11-08 13:12:27
【问题描述】:
我想根据文本(或枚举)列的一组有限值的任意顺序对表中的行进行排序。例如,如果“类”列可以具有值 A、B、C、D,我希望能够按 A > C > B > D 或其他组合对行进行排序,而不仅仅是按字母顺序或按枚举的本机顺序。这可能吗?
理想情况下,我想要一个适用于 SQLite 的解决方案,但 MySQL 也很有用。非常感谢!
【问题讨论】:
标签: mysql sqlite sorting sql-order-by
我想根据文本(或枚举)列的一组有限值的任意顺序对表中的行进行排序。例如,如果“类”列可以具有值 A、B、C、D,我希望能够按 A > C > B > D 或其他组合对行进行排序,而不仅仅是按字母顺序或按枚举的本机顺序。这可能吗?
理想情况下,我想要一个适用于 SQLite 的解决方案,但 MySQL 也很有用。非常感谢!
【问题讨论】:
标签: mysql sqlite sorting sql-order-by
ORDER BY field(column, 'A', 'C', 'B', 'D')
【讨论】:
如果 mySQL 和 sqlite 减缓在 ORDER BY 子句中使用 CASE(MSSQL 会这样做,我看不出其他系统不会这样做的原因),你可以使用类似的东西:
ORDER BY CASE
WHEN classes ='A' THEN 1
WHEN classes ='C' THEN 2
WHEN classes ='B' THEN 3
WHEN classes ='D' THEN 4
ELSE 5
END CASE
如果该列可以按任何特定顺序包含多个选项,您也可以这样做:
ORDER BY CASE
WHEN classes LIKE '%A%' THEN 1
WHEN classes LIKE '%C%' THEN 2
WHEN classes LIKE '%B%' THEN 3
WHEN classes LIKE '%D%' THEN 4
ELSE 5
END CASE
虽然重载这样的字段不是正常形式,通常不推荐。
【讨论】:
另一个变体 - 添加一个新的(临时?)表,例如
class | rank
A | 1
B | 2
C | 3
D | 4
然后您可以按class 列加入表格并按rank 排序。
【讨论】: