2014-01-06 2 views
-3

내 페이지에 나타난 열 값을 정렬하고 싶습니다. 처음에는 활성 상태이고 그 다음 보류 상태이며, 다음에는 팔릴 것입니다. 그러나 달리 보여주는. 여기에 그 상태가 알파벳에 있기 때문에이 ORDER BY Status 주어진 이론적으로 작동해야한다는 사실이지만, 당신이MySQL 필드() 정렬

SELECT * FROM custom ORDER BY status ASC 
+1

예제 데이터 세트와 원하는 결과를 보여줍니다. – Kermit

+0

처음에는 그 때 판매되고 그 후에는 보류중인 –

+1

좋아요, 예제 데이터 세트를 보여주지 마십시오. – Kermit

답변

2

내 코드입니다 현재 원하는 순서 이 알파벳 순서로 표시되며 잠깐 동안 "작동하지 않음"이 의미하는 바가 없다는 것을 무시하면 더 확장 가능한 방법으로 CASE 표현을 사용하는 것입니다.

ORDER BY CASE Status 
    WHEN 'Active' THEN 0 
    WHEN 'Pending' THEN 1 
    WHEN 'Sold'  THEN 2 
    WHEN 'Upcoming' THEN 3 
END DESC; 

미래 보장형 솔루션은 ID, 이름 및 시퀀스가있는 상태 테이블입니다. 쿼리의 해당 테이블에 가입하고 시퀀스별로 정렬합니다. 나중에 다른 순서로 데이터를 요청하기로 결정한 경우 순서를 변경할 수 있으며 나중에 쿼리를 터치 할 필요없이 상태 유형을 더 추가하는 것이 쉽습니다. 또한 문자열 대신에 ID를 저장할 수 있으므로 같은 양의 공간에 더 많은 데이터를 저장할 수 있습니다.

+0

그것의 작동하지 않습니다 –

+0

@AmirHossain 당신이 http://sqlfiddle.com/을 함께 넣어서 예상대로 작동하지 않는 것을 보여줄 수 있습니까? 거기에 일부 누락 된 데이터가 여기에 대한 답변으로 작동하지 않습니다. – amaster

+4

@AmirHossain * 무엇이 작동하지 않습니까? 어쩌면 우리가 원하는 것을 보여 주면 더 나은 일을 할 수있을 것입니다. – Kermit

6

을 할 수 있어야

SELECT 
    * 
FROM custom 
ORDER BY 
    FIELD(status,'Active','Pending','Sold','Upcoming') DESC 
+3

RESPEK! mysql 질문에 좋은 작품 – swasheck

+3

골드 [태그 : mysql] 배지 시간에! – Kermit