2011-07-28 109 views
2

問題標題可能有點模糊,所以隨意將它改成更有意義的東西,我找不到合適的單詞。如何按多列排序但不按價值排序?

因此,這裏是我的問題:

在我的表有2分重要的列

  • DATE_ADDED(datetime值)
  • special_price(數字)

special_price或者是NULL或數字值取決於特殊價格。

,我將描述我想現在爲了我的結果的方式:

首先,我想看看沒有按日期(最新的在前)下令special_price(NULL)的所有項目,然後我想看到的具有special_price的商品(因此除NULL之外的其他商品)按日期排序。

起初,我嘗試這樣:

SELECT * FROM products ORDER BY special_price, date_added DESC 

這對於第一部分偉大的工作,所有的special_price值,其中NULL,但是當它開始與這並已下令對價值special_price的項在special_price欄中。這是有道理的,因爲在查詢中我想先按special_price排序。

那麼,我該如何讓查詢忽略special_price的值,並看看它是否是NULL?所以我按日期排列所有NULL,然後按日期排列所有NOT NULL

回答

5
ORDER BY IF(ISNULL(special_price), 0, 1), date_added DESC 
+0

尼斯和簡單的,單一的SELECT +1 – gbn

+0

完美的是什麼!我自己從來沒有想過這件事。 – Pieter888

2

我會使用

SELECT *, IF(special_price IS NULL, 0, 1) AS orderer FROM products ORDER BY orderer, date_added DESC

工作正常進行,正是我需要你要完成

+0

特殊價格不會顯示0還是1?因爲它必須是NULL/0或數字值(如49.99或10)。 – Pieter888

+0

不,special_price保持不變,如果special_price爲null,則值爲0的訂閱者,如果值爲1,則爲0。 – FabioG

+0

這是完全正確的。剛剛測試它:)謝謝 – Pieter888