文字列 (主にアドレス) の例を次に示します。
12
20
43-B
43-C
123
2500
今、私はそれらを「正しい」順序と考えるものに入れました。DB テーブルの列にこれらの値があり、MySQL 検索でそれらを返すと、次のようになります。
12
123
20
2500
43-B
43-C
明らかにそれは正しくありません -20
は より大きくありません123
。
値が純粋な整数で構成されていることを保証できれば、これを理解するのは非常に簡単ですが、43-B
and 43-C
(12A
または何でも) を投入すると、問題が発生し始めます。ただし、単純に数字を取り除くことはできません。この時点でそれが何を表しているのか完全にはわかりませんが、 などの値があります40W1
。
個人的には、4000 ではなく 40 未満に分類しますが、これは非常にまれなエッジ ケースなので、その特定の例についてはあまり心配していません。ただし、文字を覚えておく必要があります。なぜなら、前に40B
来る40C
から40-B
です40C
。トリッキーですよね?知っている。
ただし、英数字のみを想定しています (つまり-
、文字列から を取り除きます)。
私がやりたいことは、その文字列を確実にソート可能な一連の数値に変換することです。
たとえば、 (パディングされた)43-B
のようなもの10000031205
になり、残りの行と共にデータベースに格納される可能性があります。住所を検索すると、並べ替え列で並べ替えることができるようになり、すべてが順番に表示されます!
私ができないこと:
- 実行時に直接比較する
- MySQL でこの検索を実行します (値は行ごとに計算する必要があります)。
- PHP で sort/asort/ksort または任意のソート関数を使用する
データベースまたは検索インデックスに格納できる値が必要で、後で並べ替えることができます。
残念ながら、これまでの試みはすべて、探している結果を生み出すことができませんでした。何か案は?