2011-03-01 3 views
1

MySQL의MySQL에서 목록을 정렬하여 특정 ID가 항상 먼저 나타나도록하려면 어떻게해야합니까?

+----+ 
| id | 
+----+ 
| 1 | 
+----+ 
| 2 | 
+----+ 
| 3 | 
+----+ 
| 4 | 
+----+ 

어떻게 항상 먼저 보여줍니다 2, 그래서 나는이 목록을 주문합니까? 1, 2, 3, 4가 아닌 2, 1, 3, 4가 출력되어야합니다. 3을 선택하면 3, 1, 2, 4가 출력됩니다.

PHP

확실히

SELECT 
    IF (`id` = 2, -1, `id`) AS `weight` 
FROM `table` ORDER BY `weight` ASC; 

내가 크리스 '대답처럼, 그것은 최선의 방법입니다 :

$a = mysql_query("SELECT * FROM table ORDER BY ???"); 

답변

4
SELECT * FROM table 
ORDER BY CASE WHEN ID = 2 THEN 0 ELSE ID END 
+1

이 내 예제와 같은 일을 수행하지만, 분명히 더 복잡를 사용하는 것입니다 (당신은 뭔가 매일 알아보기). 이것은 데이터베이스 유형 전반에 걸쳐 더 널리 지원됩니까? 아니면 더 복잡한 구문을 사용해야 할 강력한 이유가 있습니까? 나는이 방법에 익숙하지 않다는 것을 인정해야하며 좀 더 자세한 경로의 가치를 알기를 바랍니다. –

+1

@Chris - lucho가 지적했듯이 예제는 삽입 순서 (또는 테이블의 기본 순서)에 따라 달라집니다. 그의 예에서는 작동 할 수도 있지만 일반적인 경우에는 작동하지 않습니다. –

3

나는이 트릭을 사용!

+0

+1 - 내 답변 덜 간략한 버전, 나는 당신이 실제로 그것에 대한 열을 추가하지 않고도'주문'조항에 바로 IF 문을 넣을 수 있다고 생각합니다. –

+0

+1 - 내 답변에 대한 귀하의 의견을 주셔서 감사합니다,하지만 당신은 더 나은 방법을 가지고있어! :) –

0

또 다른 트릭 필드() 함수를

select * from table order by field(2,id) desc,id 
관련 문제