2016-07-20 3 views
1

私のクエリがあるとし - レコードのセットMySQLはソートランダムに製品を取り上げたが、日付によって通常の製品

is_featuredが1または0のいずれかを保持しているテーブル内のフラグフィールドである
SELECT * FROM products ORDER BY is_featured DESC, created_date DESC 

、 その明白な上記のクエリが返しますすべての特集商品が最初に(その中で最も新しいものが最初に来る)、次いで通常の商品(そのうちの最新のものが最初に来る)が表示されます。

私の質問:私たちは注目の製品が最初に来る(しかし、ランダムになります)、その後、通常の製品を以下のように、という上記のクエリを書き直すことができますどのように(作成日付順)。

私は2つの別々のクエリを記述し、結果セットに参加し、製品を表示するには、ループを反復処理することの可能な答えを感じることができます。しかし、それは単一のクエリを介して達成することができますか?私が考えることができ

答えて

2

一つの方法は、それが彼らの順序には影響を与えないように、機能を備えた製品のランダムな値や他の製品のための定数を返しますorder by句に別の計算された式を追加することです:

SELECT * 
FROM  products 
ORDER BY is_featured DESC, 
     CASE is_featured 
       WHEN 1 THEN RAND() 
       ELSE 1 -- Or some other constant 
     END, 
     created_date DESC 
+0

私が編集しました。 『THEN』されている必要があります:-(' 'THAN RAND()' – WatsMyName

+0

@WatsMyName愚かなタイプミス近くmysqlのエラーを持って、固定。 – Mureinik

+0

はい私のミスをだけでなく、私は 『THEN』として、それを読んで。おかげで、それが働いたバディ – WatsMyName

関連する問題