2011-07-28 13 views
2

質問タイトルは多少曖昧かもしれませんので、それをもっと意味のあるものに変更してみてください。私はちょうど正しい言葉を見つけることができませんでした。だからここ複数の列で並べ替えることはできますが、値で並べ替えることはできません。

は私の問題である:

私のテーブルでは2つの重要な列がある

  • DATE_ADDED(datetime値)
  • special_price(数値)

special_priceのいずれかでありますNULLまたは特別価格が何であるかに応じた数値。

私は今、私の結果を注文したいの方法を説明します:私はその後、私は見たいと思って、日付(新しい順)が発注なしspecial_price(NULL)を持つすべての項目を見てみたい

ファーストを特別価格(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

パーフェクトを達成したいのために正常に動作します

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

!私は決してこれを自分自身で考え出したことはありませんでした。 – Pieter888

2

私が使用したい、まさに私が必要なものを何を

+0

特別価格は0または1のいずれも表示されませんか? NULL/0または49.99または10のような数値でなければならないからです。 – Pieter888

+0

いいえ、special_priceがnullの場合は値0を、発注者は値を持つ場合は1です。 – FabioG

+0

それはまったく当てはまります。ちょうどそれをテストした:)感謝 – Pieter888

関連する問題