2012-11-07 3 views
-1

나는 이름이 "뉴욕"으로 상태가 앞부분이 될 다른 모든 기록이 정상적으로 올 것이다 어디 데이터베이스를 조회 할 수있는 방법을 생각을 못하고 있어요"미국 국가"의 SQL 쿼리는 무엇이 먼저 올까요?

1. id 
2. employee 
3. state 

와 MySQL의 테이블라는 이름의 직원이있다. 여기에 내가 "AAA"에서 "뉴욕"과 아무것도에 씁니다 사용 Control Flow FunctionsString Functions 지금까지

$sql = "select * from employees order by"; 
+0

요구 사항에 대해 좀 더 알려 줄 수 있습니까? 왜 순서대로 결과를 원합니까? –

+0

사실 나는 목록에서 새로운 yark의 직원을 처음으로 표시하려고합니다. – user1494854

+0

당신은'order_id'와 같은 새로운 필드를 만들 수 있고 쿼리에서'.... ORDER BY order_id ....'를 수행 할 수 있습니다. 편집 : nicNLD 솔루션이 더 좋습니다 – Ronnie

답변

9

간단한 옵션 :

ORDER BY (state = 'New York') DESC, state 

(state = 'New York') 때문에이 중 하나를 1 (참) 반환 또는 0 (거짓), 당신은 결과를 정렬을 쉽게 할 수 있도록 (state = 'New York' 반환 1) 다른 이전에 반환 뉴욕 상태.

다른 옵션

CASE를 사용하는 것이 었습니다 : 뉴욕을 같게 여부 상태로

ORDER BY CASE WHEN state = 'New York' THEN 0 ELSE 1 END, state 
+0

나에게 $ SQL을 작성해 주시겠습니까? $ sql = "상태 = '뉴욕'일 때 직원 주문에서 선택 *; 모든 항목을 표시하고 싶지만 목록의 첫 번째 항목을 새로 만 들고 싶습니다. – user1494854

+6

예 할 수는 있지만 할 수는 없습니다. 왜 직접하지 않니? 위의 주석을 쓰는 것은 실제로 이미 가지고있는 쿼리의 끝에 코드 조각을 붙여 넣는 것보다 많은 노력을 필요로합니다.내가 당신을 위해 일하길 원한다면, 나는 고용 할 수 있습니다.) –

+3

@NicNLD - 기괴하게도, 그는 그가 당신에게 타이핑 할 것을 요구할 때 타이핑하기를 원하는 것을 거의 타이핑했습니다 ... –

0

있을 것입니다.

결과 문자열로 정렬하십시오.

+0

"모든 레코드를 표시하고 싶습니다. "New York"이 먼저옵니다. 다른 레코드가 정상적으로 올 것입니다. – user1494854

3
select * from employees order by state="New York" desc; 

이 주문을 기록합니다. 나는 당신이 New Yark이라는 철자를 두 번 철자 한 것을 알아 차 렸습니다. 따라서 위의 내용을 수정하여 데이터로 작업해야 할 수도 있습니다. "desc"는 오름차순보다는 오히려 오름차순으로 내려오고, '참'값을 먼저 넣습니다.

JClaspill 메모 에서처럼 "뉴욕"과 같은 상태가없는 레코드는 상태가 아닌 자연스럽게 정렬됩니다. , stateorder by 문에 추가하면 상태에 따라 다른 레코드를 알파벳순으로 정렬하지만 "뉴욕"레코드를 먼저 보관하십시오.

+1

이것은 위대합니다 접근. 그냥 메모, 뉴욕에만 상단에 배치됩니다. 그것은 어떤 방식 으로든 후에 사물을 주문하지 않습니다. desc 뒤에 ', state'를 추가하여 나머지 결과를 순서대로 정렬하십시오. – JClaspill

+0

좋은 하나 @ JClaspill, 명확히했습니다. OP는 다른 레코드를 주문하는 것이 무엇인지 분명하게 나타내지는 않지만주의해야합니다. –

0

그 높은 순위까지 ​​관련 상태를 강제로 당신은 순서에 조건을 추가 할 수는 :

mysql [sandbox]> create table t1 (id integer primary key, state varchar(20)); 
mysql [sandbox]> insert into t1 values(1,'Last State'), (2, 'First State'); 
mysql [sandbox]> select * from t1; 
1 Last State 
2 First State 
mysql [sandbox]> select * from t1 order by state='Last State'; 
2 First State 
1 Last State 

이 "거짓, True"로 정렬 2 행에 대한이 거짓 조건을 가지고하는 평가 정상에.

0

$ sql = "SELECT * FROM 직원 주문일 때 \ '뉴욕 = \'뉴욕 \ 'THEN 0 ELSE 1 END, 상태";