0

データベースからいくつかのフィールドを選択し (左結合を含む)、次のコマンドを使用して INT を含むフィールドで並べ替えることができました。

ORDER BY FIELD (t.type, '1','2','4','5','3') 

これが表示される順序ですが、整数を含まないエントリもあり、NULL として返されます。それは問題ありませんが、必要な場所に NULL エントリを配置できないようです。

たとえば、次のようにリストの 2 番目に表示します。

ORDER BY FIELD (t.type, '1','NULL','2','4','5','3') 

また

ORDER BY FIELD (t.type, '1','0','2','4','5','3') 

等...

これを達成し、NULL t.type フィールドを持つエントリをリストの 2 番目に配置するにはどうすればよいでしょうか?

このメッセージを投稿して以来、高低を検索してきましたが、トピックに関するものは何も見つかりません.

どんな助けでも大歓迎です。

アップデート:

以下は、使用している完全な select ステートメントです。

select d.url, d.lid, d.title, d.description, d.date, d.hits, d.downloadratingsummary, d.totalvotes, d.totalcomments, d.filesize, d.version, d.homepage, d.ns_compat, d.ns_des_img, t.type from downloads_downloads d LEFT JOIN downloads_type t on d.lid = t.lid where cid=96 ORDER BY FIELD (t.type, 1,12,2,4,5,3), d.date DESC LIMIT 0,20
4

4 に答える 4

6

他にはない NULL の代わりに使用できる値はありますか? 何かのようなもの:

ORDER BY FIELD(coalesce(t.type, -1), '1', '-1', '2', '4', '5', '3') 

ちなみに、引数は文字列の代わりに数値にすることもできます:

ORDER BY FIELD(coalesce(t.type, -1), 1, -1, 2, 4, 5, 3) 
于 2013-06-27T13:52:46.357 に答える
0

前後の引用符を削除しますNULL。文字列ではありません。実際、数字を囲む引用符も削除してください。その場合、おそらく問題はありませんが、文字列でもありません。

それがうまくいかない場合、適切に処理する方法がわかりません。FIELD()のMySQLドキュメントには次のように書かれています:

str が NULL の場合、NULL は任意の値との等値比較に失敗するため、戻り値は 0 です。

したがって、3 番目の例で試したように、0 を使用する必要があるかもしれませんが、引用符を削除すると修正される可能性があります。

于 2013-06-27T13:34:40.060 に答える