mysql - 排序特殊名称以在数据库中结束

标签 mysql

我想对一个mysql表进行排序

select id,name from tbl order by name asc;

返回

1  name1
2  name2
4  name3
5  name4
8  name5

如何排序,例如 name 3 像这样放在表的末尾

select id,name from tbl order by ["name is name3????"],name asc;

返回

1  name1
2  name2
5  name4
8  name5
4  name3

谢谢

最佳答案

使用 case,您可以根据条件返回一个值。因此,您可以为 name3 返回 1,为其他名称返回 0。主要对此值进行排序,以将 name3 放在后面。次要排序值是名称,因此其他名称仍按字母顺序排序。

select 
  id, name 
from 
  tbl 
order by 
  case when name = 'name3' then 1 else 0 end,
  name

草莓刚刚在评论中教我你也可以使用函数 field来完成这个。如果您想为多个名称指定特定的排序,这将特别方便且更紧凑。使用 case 会很快变得笨重。 Field 返回其他字符串列表中第一个字符串的索引,因此 field(name, 'name3', 'name4') 将为 'name3' 返回 1 并且“name4”为 2,所有其他名称为 0。

您的查询将如下所示:

select 
  id, name 
from 
  tbl 
order by 
  field(name, 'name3'),
  name

关于mysql - 排序特殊名称以在数据库中结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742062/

相关文章:

php - Stripslashes() 在电子邮件中不起作用

php - Codeigniter:更改模型中的 SQL 查询会导致 "failed to open stream"警告。但是,使用简单的 select * 查询进行测试是可行的

MySql子查询返回多于1条记录

php - 优化MySqli请求

PHP 表单更新 mysql 数据库未完成更新

MYSQL 分组依据值 > 0

mysql - @Transactional 不执行提交

php - 登录功能似乎无法正常运行

php - 尝试插入 mysql 数据库忽略空白字段

php - 亚马逊 RDS : How to import database to amazon RDS instance?