2011-05-12 18 views
5

私は関連する色の花のテーブルがあります。花のリストを入手して、例えばYellow、次にBlue、次にRedと注文することは可能ですか?基本的には、値のリストを指定し、その値で結果を並べ替える必要があります。可能? ANSIのCASE文..orMySQL - ASCまたはDESCでないものによって注文する

ORDER BY FIND_IN_SET(column, 'Yellow,Blue,Red') 

答えて

9

あなたはFIND_IN_SETを使用することができます

ORDER BY CASE column 
      WHEN 'Yellow' THEN 1 
      WHEN 'Blue' THEN 2 
      WHEN 'Red' THEN 3 
     END 
2

あなたはソートの要件に応じてsort_orderの色テーブルにフィールドを追加し、および値を提供することができます。あなたが使用できるクエリでORDER BY sort_order ASC

私は、これら3つの色について明示的に指定されていない動的要件に従って注文したいと考えています。これにより、ソート順を柔軟に管理できます。

+0

時々私は(イエロー、ブルー、レッド)、時には(ブルー、イエロー、レッド)、時には(レッド、イエロー、ブルー)を注文する必要があるときにコラムを追加すると問題は解決します。 – StackOverflowNewbie

+8

それは、 sort_order 'フィールドには、ソートする必要のある階層が格納されます。たとえば。 青色 - 1 黄色 - 2 赤色 - 3 ソート(赤、黄色、赤)のソート(赤、黄、赤)のソートを行うときは、colorと 'sort_order'青) 青 - 3 黄色 - 2 赤 - 1 これは、PHPコードを編集せずにソート順を変更するのに役立ちます。より高いレベルでは、ページ内のソート順を管理するWebプロビジョニングを提供し、ユーザ/管理者が注文を変更したいときにいつでも使用できるようにします。これはハイエンドのWebサイトでの処理方法です。 –

2

私の選択は、FIELD(str, str1, str2, ...)機能を使用しています。

str1、str2、str3、...リストの にstrのインデックス(位置)を返します。 strが見つからない場合は0を返します。

だから、結果のリストを注文するの戻り値を使用することができます。

ORDER BY FIELD (color, 'Yellow', 'Blue', 'Red') 

あなただけDESCを追加し、順序を逆にしたい場合。

関連する問題