2017-08-31 10 views
0

私は私の倉庫のビンのための以下のアドレス指定方法を使用しています。文字列のためにMysqlオーダー

1-3-5 
2-4-1 
12-1-2 

は今、私はで注文を使用してそれらをソートしたいが、問題は、私は次のようにソートする必要があるものの12-1-2は2-4-1

の前に来ている以下

1-3-5 
2-4-1 
12-1-2 
19-3-5 
23-3-2 
実際に

3異なる情報が含まれているの各アドレス:

Shelve-floor-bin 

だから私は、その後、床ビン、その後、最初のシェルブでソートする必要があります。

+1

なぜそれが問題ですか? – Strawberry

+0

'p-q-r'は、' p'、 'q'、' r'があたかもレキシカル値ではなく数値であるかのようにして欲しいと思います。つまり、 '1-2-3'が' 1-10-3'の前に来るようにします。あれは正しいですか?あなたの要件を明確にするためにあなたの質問に[編集]してください。 –

+0

あなたのコメントは完全に正確で、私の質問も編集されました – user8542794

答えて

0

5これは機能しますか。

SELECT * FROM `tablename` ORDER By convert(`fieldtosory`, decimal) ASC 
+0

このソリューションは最初の部分でのみ動作します。つまり、1-xx、2-xx、12-xx、22-xxを正しくソートしていますが、平均1-5-xが1-3-xより前に来ることを意味する – user8542794

0
SELECT '2-1' x UNION SELECT '12-1' ORDER BY x; 
+------+ 
| x | 
+------+ 
| 12-1 | 
| 2-1 | 
+------+ 

SELECT '2-1' x UNION SELECT '12-1' ORDER BY x+0; 
+------+ 
| x | 
+------+ 
| 2-1 | 
| 12-1 | 
+------+ 
0

あなたはfirst rule of relational database designを無視してきました。解決策は、識別子をテーブルの3つの属性に分割することです。それ以外は回避策です。

これが不可能な正当な理由があると仮定すると、既に提案されているものよりも良い回避策は、私が記述したとおりにテーブルを変更することですが、名前を変更し、オリジナルのテーブル名を使用する3つの属性。しかし、これはビュー属性に書き込もうとする素朴なコードを破ります。

関連する問題