2010-12-01 65 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; 

這工作得很好,只是有時media_priority.media_order回來爲空和MySQL把空值排在首位。

所以我想弄清楚如何做一個IS NULL AS tempcol語句與我的左連接,所以我可以通過第一個命令.....我似乎無法得到正確的語法。

我會在上面的查詢中放置IS 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 

,但不起作用。

回答

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

或者使用一個神奇的數字,如果你有一些上限,media_order永遠不可能達到。

ORDER BY 
    COALESCE(media_priority.media_order,99999999); 

第一種方法顯然比較安全!

+0

你的回答比我的好。我過去也這樣做過,不知道爲什麼它沒有發生在我身上。 – HLGEM 2010-12-01 16:15:02

+0

完美。我使用了第一個建議。 – 2010-12-01 16:16:22

10

我建議首先按照media_priority.media_order IS NULL的布爾值進行排序,然後是列值,以強制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;