1

1 つのテーブルにニュース データを含む Web ページがあります。

多くの場合、次の SQL を使用します。

SELECT * FROM table ORDER BY insertDate DESC

注文する。

ID|priority|insertDate
1 |NULL    |2012-09-16
2 |NULL    |2012-09-17
3 |NULL    |2012-09-18
5 |NULL    |2012-09-19
5 |NULL    |2012-09-20
4 |1       |2010-05-10 - this is way back in the future

しかし、ユーザーは 1 つのニュースを優先したいと考えています。そして、私が使用する場合

 SELECT * FROM table ORDER BY priority ASC ,insertDate DESC

正しく動作しません。どのように ORDER を使用して結果を取得する必要がありますか?

ID|priority|insertDate
4 |1       |2010-05-10
1 |NULL    |2012-09-16
2 |NULL    |2012-09-17
3 |NULL    |2012-09-18
5 |NULL    |2012-09-19
5 |NULL    |2012-09-20
4

2 に答える 2

4

合体を使用して、有効な値を Null 優先度行に設定します。

SELECT * 
FROM table 
ORDER BY 
   coalesce(priority,0) ASC ,
   insertDate DESC

編集済み

質問を読み直すと、正しい順序は ASC ではなく DESC であることがわかります。

   coalesce(priority,0) DESC ,

また、@yshavit コメントにも注意してください。パフォーマンスを向上させるために、クエリを 2 つの選択に分割し、最初に null 以外の値を選択することができます。

この新しいフィールドを作成するときに、デフォルト値を設定できることを忘れないでください。これにより、次のことが回避さcoalesceunionます。

data_type [NOT NULL | NULL] [DEFAULT default_value]
于 2012-09-20T07:09:57.817 に答える
0
SELECT * 
FROM table 
ORDER BY 
   if(priority IS NULL,'0',priority) ASC ,
   insertDate DESC;
于 2012-09-20T07:14:26.160 に答える