MySQLで整数フィールドに数値を格納し、先行ゼロを維持する必要があります。現在のフィールドがBigint(16)であり、数値によって先行ゼロの量が異なる場合があるため、zerofillオプションを使用できません。 IE:0001-0005、次に008-010の保存が必要になる場合があります。番号の一意性(これらはIDなどとして使用されていません)については心配していませんが、INTSとして保存する必要があります。
CHAR/VARCHARを使用し、PHPで整数として値を型キャストすることで、クエリによるソート結果が英数字ソートにつながることを意味します。IE:SORT BY number ASCは
001
002
003
1
100
101
102
2
明らかに、番号順ではなく、英数字順です。これは望ましくありません。
いくつかの賢い回避策を期待しています:)
整数として格納された数値を保持します。
次に、関数 LPAD()
を使用して、ゼロが埋め込まれた数値(左)を表示します。
SELECT LPAD( 14, 7, '0') AS padded;
| padded |
-----------
| 0000014 |
ゼロフィル文字の数が可変の場合は、その(ゼロフィル)長さでテーブルに別の列を追加します。
[〜#〜] cast [〜#〜] を使用して、整数のようにstring(CHAR/VARCHAR)列をソートすることもできます
ORDER BY CAST(`col_name` AS SIGNED) DESC
したがって、それらをCHAR/VARCHARタイプのフィールドに格納できます。
先行ゼロのある整数を格納することはできません。 1つの方法は、それをvarcharとint列に保持することです。この場合、1つの値ともう1つのintValueの2つの列が必要であり、ソート中にintValueを使用してソートできます。これは簡単に実装できます。
Select Value from Table order by intValue;
もう1つのオプションは、2つの列、1つの値とNumOfZeroを使用し、これらを使用して目的の結果を得ることができます。これは複雑ですが、DBの負荷が軽い場合があります。
フィールドの構造を変更し、属性をUNSIGNED_ZEROFILL
ゼロを保持します。
しかし、フィールドの長さに注意する必要があります。これは、残りの数値をすべてゼロに戻すため、フィールドの長さを入力するためです。