2010-12-01 2 views
4

MySQL의MySQL은 말

SELECT * FROM media 
LEFT JOIN media_priority 
ON (media_priority.media_id = media.id AND media_priority.media_tag = '".$tag."') 
WHERE something = 'something' 
ORDER BY media_priority.media_order; 

이 잘 작동에 null 값으로 조인 순서를 떠났다.

그래서 난 그냥 구문 권리를 얻이 수없는 것 ..... 내 왼쪽에 tempcol 문은 내가 먼저로 주문할 수 있습니다 참여로가 null하는 방법을 알아 내려고 노력했다.

어디 위 내 쿼리에서이 NULL 문입니다 둘 것?

내가 좋아하는 뭔가를 생각하고 있었다 :

LEFT JOIN media_priority 
ON (media_priority.media_id = media.id AND media_priority.media_tag = '".$tag."') 
media_priority.media_order IS NULL AS isnull 

하지만이 작동하지 않습니다. 당신이 media_order이 실행 가능하게 도달하지 않습니다 일부 상한이있는 경우

답변

11
ORDER BY 
    CASE WHEN media_priority.media_order IS NULL THEN 1 ELSE 0 END, 
    media_priority.media_order; 

또는 마술 번호를 사용합니다.

ORDER BY 
    COALESCE(media_priority.media_order,99999999); 

첫 번째 방법은 분명히 다소 안전합니다!

+0

당신의 대답은 내보다 낫다. 나는 과거에도이 일을 해왔고 왜 그것이 나에게 일어나지 않았는지 모르겠다. – HLGEM

+0

완벽 나는 첫 번째 제안을 사용했다. –

10

나는 끝까지 널 (null)을 강제하기 위해, media_priority.media_order IS NULL 첫째, 다음 열 값의 부울 값으로 순서를 권장합니다. 이처럼

:

SELECT * FROM media 
LEFT JOIN media_priority 
ON (media_priority.media_id = media.id AND media_priority.media_tag = '".$tag."') 
WHERE something = 'something' 
ORDER BY (media_priority.media_order IS NULL) ASC, media_priority.media_order ASC; 
+0

왜 이것을 좋은 해결책으로 생각하지 않습니까? – user991554