8

次のようなクエリがあります。

SELECT 
 title, desc, date 
FROM 
 tablename 
ORDER BY 
 date ASC, title ASC;

データに実際に日付がある場合は正常に機能します。問題は、日付の送信はオプションであるため、日付として0000-00-00を取得することがあります。これは、日付のないすべての行を上に配置するという不幸な効果があります。

だから、私はこれを試しました:

SELECT 
 title, desc, date 
FROM 
 tablename 
ORDER BY 
 date DESC, title ASC;

どの種類の作品ですが、実際にはそうではありません-日付(0000-00-00以外)のすべてのアイテムが降順でリストされ、その後に0000-00-00のすべてのアイテムが続きます。

私がやりたいのは、日付ASC、タイトルASCで注文することですが、日付が!= 0000-00-00の場合のみですが、日付が= 0000-00-00の場合は、それらのタイトルASCで注文するだけです(私はそれを正しく説明しました)。

これを行うために私が考えることができる唯一の方法は、非SQLベースです(2つのクエリ、または各クエリがメモリ内の配列にデータを入力するだけで、PHPを使用して並べ替えます)。

これを実行できるSQLクエリはありますか?

4

2 に答える 2

9
ORDER BY date = '0000-00-00' ASC, date ASC, title ASC
于 2009-05-19T00:29:57.237 に答える
4

2つのクエリソリューションは優れたソリューションですUNION。コマンドを使用してSQLですべてを実行できます。

最初のクエリはゼロ以外の日付を対象とし、次にUNIONがゼロ以外の日付を対象とします。

編集:次のようなもの:

SELECT * FROM tbl 
   WHERE DATE != '0000-00-00' 
   ORDER BY date ASC 
UNION SELECT * FROM tbl
   WHERE DATE = '0000-00-00'
   ORDER BY title ASC

この場合、これはあまり役に立たないかもしれませんが、複雑なクエリの場合UNIONは便利です。

于 2009-05-19T00:32:07.483 に答える