2012-03-06 41 views
2

我試圖獲取所有用戶,並按另一個表上的字段排序,但是此字段並不總是存在?按字段排序,僅當它存在時

用戶 - 持有用戶 用戶元 - 持有元數據,特別是「重量」,這是我想要命令的。

一個更具體的解決方案是自動將它們定義爲默認重量,但是無論如何,我可以讓它工作沒有?當前工作查詢:

SELECT * FROM users u, usermeta um 
WHERE u.ID = um.ID 
    AND u.name LIKE '%search_terms%'; 

由部分失去了秩序,任何/所有的幫助,將不勝感激!

+2

您可以使用此:由IFNULL'順序(um.weight,0)' – 2012-03-06 17:37:26

回答

3

如果您在表格(u.ID = um.ID)之間存在關鍵關係,並且您想列出所有用戶,則可以使用類似於此的命令以weightusermeta進行訂購。

LEFT JOIN讓您在usermeta保留所有用戶,無論他們的存在:

SELECT *, IFNULL(um.weight,9999) as newweight 
FROM users u 
LEFT JOIN usermeta um on u.ID = um.ID 
WHERE u.name LIKE '%search_terms%' 
ORDER BY IFNULL(um.weight,9999); 
1
SELECT * 
FROM users u, usermeta um 
WHERE u.ID = um.ID AND                                                      
     u.name LIKE '%search_terms%' 
ORDER BY 
     CASE WHEN um.weight IS NULL THEN 9999 ELSE um.weight END; 

您可以使用一個case語句是缺少weight反應通過將其代別的東西,如果它不見了。