2011-09-26 18 views
4

我有這樣一個表:如何排除用MySQL排序的一些值?

id products_name sort 
1 abc   0 
2 xyz   1 
3 pqr   2 
4 qwe   0 

我想通過sort列,按升序排序記錄,但我不希望在結果集中的頂部0行。
sort列中的0行應位於結果集的底部,其餘行應使用sort列以升序排序。

我該怎麼做?

回答

11

你可以嘗試這樣的:

ORDER BY IF(SORT=0, 999999999, SORT) 
5

可以使用ORDER BY IF聲明:

SELECT * 
FROM table 
ORDER BY IF(SORT = 0, 999999999, SORT) 

,或者您可以使用UNION ALL語句來實現這一目標:

(SELECT * FROM table WHERE sort > 0 ORDER BY sort) 
UNION ALL 
(SELECT * FROM table WHERE sort = 0) 
+0

的' UNION'子句意味着用於刪除重複項的排序,這意味着您的輸出結果不是將按'sort'排序。你會想用'UNION ALL'有機會逃避排序傳遞... – Romain

+0

@Romain:你說得對。如果你使用'UNION',結果將被重複過濾。相反,使用'UNION ALL'。 –

+0

如果您的WHERE子句是'sort = 0',則不需要'ORDER BY sort'。 –