以前に投稿された質問には回答がありませんでした。そのため、この MySQL マニュアル エントリに基づいて、私の研究結果からさらに明確な説明と詳細に置き換えています。
過去に、代替の既定の並べ替えを指定できる代替照合を使用してきました。Mysql ではこれを列レベルまで可能にしていますが、それを機能させる方法がわかりません。
当社のお客様は、マスター テーブルへのほぼすべての参照で 1 文字コードの標準セットを使用しており、これらのコードを必要な順序で提示することは、常に非常に面倒で、PHP の関数やルーチンを使用するのが困難です。
SELECT * FROM myTable order by my_code
NORMAL, default sorting would return this: DESIRED, default sorting should return this:
my_code | Description my_code | Description
1 | Grade 1 P | Pre-Kindergarten
2 | Grade 2 K | Kindergarten
3 | Grade 3 1 | Grade 1
A | Adult 2 | Grade 2
K | Kindergarten 3 | Grade 3
P | Pre-Kindergarten A | Adult
これを行う手順は、10.4.3 のドキュメントに記載されています。、および例は10.1.78 のドキュメントに示されています。
手順では、この表と重みの指定方法を示します。これは、私が迷っているところだと思います。以下のようにウェイトを変更し、「P」(x50P) と「K」(x4B) を「0」(x30) の前に置きましたが、「1」(x31) が間に現れるようにソートを変更しただけです。 「P」と「K」、他のすべての並べ替えは変更されていないように見えます。
<collation name="latin1_test_ci">
<map>
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
50 4B 30 31 32 33 34 35 36 37 38 39 41 43 55 3A
3B 3C 3D 3E 3F 40 42 44 45 46 47 48 49 4A 4C 4D
4E 4F 51 52 53 54 56 57 58 59 5A 5B 5C 5D 5E 5F
60 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 7E 7F
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
41 41 41 41 5C 5B 5C 43 45 45 45 45 49 49 49 49
44 4E 4F 4F 4F 4F 5D D7 D8 55 55 55 59 59 DE DF
41 41 41 41 5C 5B 5C 43 45 45 45 45 49 49 49 49
44 4E 4F 4F 4F 4F 5D F7 D8 55 55 55 59 59 DE FF
</map>
</collation>
上記の代替照合で結果を並べ替える
Hex |my_code | Description
32 | 2 |Grade 2
33 | 3 |Grade 3
41 | A |Adult Ed
4B | K |Kindergarten
31 | 1 |Grade 1
50 | P |Pre-K