mysql - 按 where 子句中的第一个条件排序

cir*_*iro 3 mysql order-by like

我有一个表由以下字段组成

id, name
Run Code Online (Sandbox Code Playgroud)

具有以下值

1, ciro
2, test ciro
3, ciprox
4, other
5, other
Run Code Online (Sandbox Code Playgroud)

我想获得所有以“ci”开头或包含“ci”的值,但在它们以ci开头然后其余部分之前向我显示结果。

查询

select * FROM table WHERE name like 'ci%' or name like '%ci%' order by name;
Run Code Online (Sandbox Code Playgroud)

我回来了

1, ciro
2, test ciro
3, ciprox
Run Code Online (Sandbox Code Playgroud)

我想要

1, ciro
3, ciprox
2, test ciro
Run Code Online (Sandbox Code Playgroud)

因此在名称以“ci”开头的行之前,然后是那些包含

有没有办法不使用两个查询来获得结果?

Col*_*art 8

这是一个很常见的问题!一个case表达式在这里有帮助。类似于(未经测试)的查询

select *
from table
where name like '%ci%'
order by case when name like 'ci%' then 0 else 1 end, name;
Run Code Online (Sandbox Code Playgroud)

应该做你想做的。