Mysql порядок с помощью строки поиска - PullRequest
3 голосов
/ 22 сентября 2011

У меня есть запрос mysql, например:

select * from employee 
  where name like '%ani%'

Я хочу, чтобы мои результаты были в порядке, начиная с ani, например.мои результаты должны выглядеть следующим образом: {anil, anirudha, rani, ...} сначала с ani, а затем с другими символами.

Может кто-нибудь помочь мне в этом.

Ответы [ 5 ]

2 голосов
/ 22 сентября 2011

Редактировать: Добавлено второе решение.

Решение 1:

select  1 AS OrderField, name
from    employee 
where   name like 'ani%'
UNION ALL
select  2 AS OrderField, name
from    employee 
where   name like '_%ani%'
ORDER BY OrderField, name

Решение 2:

select  name, CASE WHEN name LIKE 'ani%' THEN 1 ELSE 2 END OrderField
from    employee
where   name like '%ani%'
order by OrderField, name
1 голос
/ 22 сентября 2011

Что-то вроде

select * from employee where name like '%ani%' order by locate('ani', name) asc, name asc

Нужно сделать трюк ... (сортировка по позиции подстроки во всей строке)

0 голосов
/ 22 сентября 2011
select  * from employee 
where name like '%'+'ani'+'%'
order by if(SUBSTRING(name, 1, length('ani'))= 'ani', 0,1), name

для сервера mssql if с case when
с предоставленным синтаксисом легко заменить 'ani' на любое значение, которое вы хотите

0 голосов
/ 22 сентября 2011

Я не совсем уверен, что именно вы ищете.Если вы хотите просто упорядочить результаты этого запроса по имени:

select * from employee 
  where name like '%ani%'
order by name asc;
0 голосов
/ 22 сентября 2011

Вы можете использовать союз для достижения этого:

select * from employee where name like 'ani%' order by name
union 
select * from employee where name like '%ani%' and not name like 'ani%' order by name
...