mysql按字母顺序排列并设置“other”到最后

时间:2012-11-18 21:24:04

标签: php mysql sql-order-by

我的表'类别'有两列:'id'和'name'。

我想显示名称并按字母顺序排列表格,但如果名称“其他”存在,我想将其设置为最后一行。

有没有办法实现这一点而不创建另一个标记位置的列?

ORDER BY name DESC { something to set name = "other" to the end }

谢谢!

1 个答案:

答案 0 :(得分:3)

使用CASE,您可以在ORDER BY中有条件地应用排序。有条件地为name <> 'other'分配了0的行,这些行在匹配other的{​​{1}}匹配1之前排序。然后它由name按次序排序。

ORDER BY
  CASE WHEN name <> 'other' THEN 0 ELSE 1 END,
  name ASC

您在示例中使用name DESC,但您的描述暗示您希望按字母顺序升序排序。如果这不正确并且您 希望它降序,请改用name DESC

请注意,对于MySQL,布尔表达式(name = 'other')将计算为0或1.因此可以简化为CASE

ORDER BY
  /* name <> 'other' returns 0 */
  (name = 'other'),
  name ASC

但这对任何RDBMS都不可移植。