我有包含两列的“类别”表:“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/