php - mysql按字母顺序排序,最后设置 "other"

标签 php mysql sql-order-by

我有包含两列的“类别”表:“id”和“name”。

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

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

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

谢谢!

最佳答案

使用 CASE , 您可以在 ORDER BY 中有条件地应用排序. name <> 'other'所在的行有条件地分配了一个 0在那些匹配 other 之前排序分配了 1 .然后通过name进行子排序.

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

您使用 name DESC在您的示例中,但您的描述暗示您希望它按字母顺序升序排序。如果那不正确,而您确实希望它降序,请使用 name DESC相反。

请注意,对于 MySQL, bool 表达式 (name = 'other')将评估为 0 或 1。因此可以简化为省略 CASE :

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

虽然这不能移植到任何 RDBMS。

关于php - mysql按字母顺序排序,最后设置 "other",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13444756/

相关文章:

php - 如何在函数内定义连接以与数据库进行 pdo 通信

php - 在 href 上更改颜色(切换类?)

php - 使用 PHP 和 MySQL 更新帖子

MySQL yearweek() vs week() 返回不同的结果

mysql - 在终端中从外部 sql 文件执行 mysql 命令

mysql - 按每个值 COUNT 排序

Symfony2 createQuery 按字段排序

php - 将 ORDER BY RAND() 与多个 WHERE 子句一起使用 mysql

php - 使用 Bing.com 和 Bing Search API 的不同结果

php - OOP - 使用私有(private)属性和公共(public) getter