2012-12-21 3 views
3

으로 나는이 일에 대한 답 찾을 수 없습니다 :MySQL의 주문 특정 문자열

내가 이렇게 같은 테이블을 말해봐 :

ID Name 
------------------------ 
1 AAAAAAAAA 
2 ABAAAAAAA 
3 BBAAAAAAA 
4 CDAAAAAAA 
5 BBAAAAAAA 

내가 name으로 주문할 수있는 방법이됩니다 -

를 -하지만 것

최종 결과 (BBBA까지 이동하는 대신 AZ에서의) BB 말에서 순서를 시작하고 다시 루프 라운드를하자

3 BBAAAAAAA 
5 BBAAAAAAA 
4 CDAAAAAAA 
1 AAAAAAAAA 
2 ABAAAAAAA 

의미가 있습니까? 당신이 BB이 처음에 표시 할 경우

답변

3

사용할 수 :

select * 
from yourtable 
order by case when substring(name, 1, 2) = 'BB' then 0 else 1 end 

SQL Fiddle with Demo

를 참조하면 두 번째 표시 CD를 싶은 경우에, 사용

select * 
from yourtable 
order by 
    case 
    when substring(name, 1, 2) = 'BB' then 0 
    when substring(name, 1, 2) = 'CD' then 1 
    else 2 end, name 

참조 SQL Fiddle with Demo

두 번째 쿼리의 결과 :

| ID |  NAME | 
------------------ 
| 3 | BBAAAAAAA | 
| 5 | BBAAAAAAA | 
| 4 | CDAAAAAAA | 
| 1 | AAAAAAAAA | 
| 2 | ABAAAAAAA | 
+0

'순서 : 그것은 먼저 루프 당신이 원하는 방식으로하고, 또한 이름으로 정렬 이름으로 정렬 된 행 >= 'BB' 다음 행 < 'BB'을 넣어 것입니다 또한 작동해야합니다 - 이것에 대한 나쁜 습관이 있으며, 언제 "선호합니까?" * 업데이트 : * 업데이트로'case'를 사용하는 것이 훨씬 더 합리적입니다. 신경 쓰지 마. :-) – h2ooooooo

+0

@ h2ooooooo 만약'order by '명령을 사용하면'desc by order' 명령을 사용할 수 있습니다.하지만 몇 가지 특정 명령이 있다면'case'를 사용할 수 있습니다 – Taryn

+0

이것은 실제로 내가 필요로하는 것에 완벽합니다. - 감사합니다. ! 최대한 빨리 받아 들일 것입니다. – BenOfTheNorth

0

이렇게하면 모든 행이 이름순으로 정렬됩니다. = 'BB'DESC` (2 명, 1) 하위 문자열로

select * 
from your_table 
order by name<'BB', name