2011-07-28 91 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