私は関連する色の花のテーブルがあります。花のリストを入手して、例えばYellow
、次にBlue
、次にRed
と注文することは可能ですか?基本的には、値のリストを指定し、その値で結果を並べ替える必要があります。可能? ANSIのCASE文..orMySQL - ASCまたはDESCでないものによって注文する
ORDER BY FIND_IN_SET(column, 'Yellow,Blue,Red')
:
私は関連する色の花のテーブルがあります。花のリストを入手して、例えばYellow
、次にBlue
、次にRed
と注文することは可能ですか?基本的には、値のリストを指定し、その値で結果を並べ替える必要があります。可能? ANSIのCASE文..orMySQL - ASCまたはDESCでないものによって注文する
ORDER BY FIND_IN_SET(column, 'Yellow,Blue,Red')
:
あなたはFIND_IN_SETを使用することができます
ORDER BY CASE column
WHEN 'Yellow' THEN 1
WHEN 'Blue' THEN 2
WHEN 'Red' THEN 3
END
あなたはソートの要件に応じてsort_order
の色テーブルにフィールドを追加し、および値を提供することができます。あなたが使用できるクエリでORDER BY sort_order ASC
私は、これら3つの色について明示的に指定されていない動的要件に従って注文したいと考えています。これにより、ソート順を柔軟に管理できます。
私の選択は、FIELD(str, str1, str2, ...)
機能を使用しています。
str1、str2、str3、...リストの にstrのインデックス(位置)を返します。 strが見つからない場合は0を返します。
だから、結果のリストを注文するの戻り値を使用することができます。
ORDER BY FIELD (color, 'Yellow', 'Blue', 'Red')
あなただけDESC
を追加し、順序を逆にしたい場合。
時々私は(イエロー、ブルー、レッド)、時には(ブルー、イエロー、レッド)、時には(レッド、イエロー、ブルー)を注文する必要があるときにコラムを追加すると問題は解決します。 – StackOverflowNewbie
それは、 sort_order 'フィールドには、ソートする必要のある階層が格納されます。たとえば。 青色 - 1 黄色 - 2 赤色 - 3 ソート(赤、黄色、赤)のソート(赤、黄、赤)のソートを行うときは、colorと 'sort_order'青) 青 - 3 黄色 - 2 赤 - 1 これは、PHPコードを編集せずにソート順を変更するのに役立ちます。より高いレベルでは、ページ内のソート順を管理するWebプロビジョニングを提供し、ユーザ/管理者が注文を変更したいときにいつでも使用できるようにします。これはハイエンドのWebサイトでの処理方法です。 –