したがって、棒グラフのラベルに使用しているクエリがあります。PHPでfetch_arrayを使用してこれらのラベルを抽出しています。ラベルの順序は次のとおりです。
白、アフリカ系アメリカ人、ヒスパニックなど。
しかし、ascまたはdescでタイプ順を実行すると、次のようなアルファベット順になります。
アフリカ系アメリカ人、ヒスパニック、白。これらを特定の順序で具体的に注文する方法はありますか?
ステートメントを使用してCASE
、ソート順を指定します。値に0を割り当て、White
他のすべての値に1を割り当て、残りの値をアルファベット順に並べ替えます。
ORDER BY
CASE WHEN label='White' THEN 0 ELSE 1 END,
label ASC
他の場所で注文を定義する必要があります(注文は自由形式であるため、自動ソリューションに依存することはできません)。1つのトリックは、テーブルにフィールドを追加することです。これにより、クエリで次のmyorder
ように指定できます。ORDER BY myorder
id desc myorder
.. ......... ..........
1 Hispanic 3
2 White 2
3 African- 1
このアプローチの利点の1つは、再利用可能であり、ソフトウェアごとに順序を編集でき(この特定の種類のオプションが必要な場合)、任意の行数で機能することです。
mysqlでは、カスタムソート順のフィールド関数を使用できます。例えば:
SELECT * FROM GraphTable ORDER BY FIELD(GraphLabel, 'White', 'African American', 'Hispanic')
またはIDで:
SELECT * FROM GraphTable ORDER BY FIELD(LabelID, 123, 456, 234);
mysqlマニュアルから:
FIELD(str、str1、str2、str3、...)
str1、str2、str3、...リスト内のstrのインデックス(位置)を返します。strが見つからない場合は0を返します。