2011-02-03 37 views
2

どのようにしてAlphaNumeric順でMySQLにソートできますか?MySQLカラムを英数字順にソート

このようなデータを持つテーブルがあるとします。

Name + ID 
AA  | 10 
AE  | 2 
AD  | 1 

Iソート列ID結果が

1 
10 
2 

あるしかし、私は

SELECT * FROM tableName ORDER BY columnName + 0; 

1 
2 
10 

列IDに対してこのようにselect文で+ 0を追加します。しかし、列名のための結果はこの

AA 
AE 
AD 

Iすでにこのリンクを参照していますが、それは私のためには機能しません。 Alphanumeric Order By in Mysql

注:すべての列タイプはvarcharで、どのデータが挿入されるか予測できません。 私の問題は単純だとわかっていますが、依然として私が望む結果を得ることはできません。 また、LIMITを使用しているため、Javaを使用して結果を並べ替えることはできません。私はどんなhelp.Thanks

を感謝します

追加情報:(サンプル表は名前とIDのベースをソートする) HEADER1は別のテーブルに設定の名前とW/C HEADER2と同じであるがID

です
CREATE TABLE IF NOT EXISTS `sort` (
    `header1` varchar(200) DEFAULT NULL, 
    `header2` varchar(200) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


INSERT INTO `sort` (`header1`, `header2`) VALUES 
('AA', '10'), 
('AE', '2'), 
('AD', '1'), 
('AD', '1'), 
('AF', 'a'), 
('AF', 'a1'), 
('1', 'a1'); 
+1

Javaを使用できない場合は、タグを削除する必要があります。もっと正確にする必要があります。たとえば、あなたが期待するデータを教えてください。 '(AA、5、A6、B4、9C)'については、あなたもそれをどのようにソートする必要がありますか? – maaartinus

+0

文字列のソート方法が数字とは異なります。文字列を数値のようにソートする必要があります。その列に数値だけを格納する場合は、数字のデータ型にする必要があり、問題は解決しません。 –

+0

結果をLIMITで取得する必要があるため、Javaを使用できません。これは私のページ区切りコーディングによるものです。 LIMITを使用してクエリを高速化しました。また、列を基に並べ替える必要があります。はい、私はそのような並べ替えをする必要があります(AA、F、A6、B4,9C) – ace

答えて

0

データを挿入する順序が表示されているため、ソートされていないようです。

今は明らかです!問題は、あなたのテーブルの仕組みを誤解していることです。 テーブルの定義された順序はありません。それだけです。 ORDER BYを指定せずにSELECTを実行すると、DBは自由に任意の順序で列を返すことができます。そして、それについてあなたができることは何もありません。

通常、行は主キーによって決定された順序で返されます。それがない場合、削除がない限り、挿入命令が使用されます。削除後、DBは新しいレコードをどこかのギャップを埋めるように置きます。ただし、これは保証された動作ではなく、別のバージョンなどに切り替えると変更される可能性があります。

テーブルの行の順序に決して依存しないでください。注文が重要な場合は、常にORDER BYまたはORDER BYを含むVIEWを使用してください。

+0

情報をありがとう、非常に有益だった。しかし、私はORDER BYを使用しています。私のテーブルには主キーがあります。私は結果を得る別の方法をする必要があると思う。実際には私はDBから結果を取得し、それを改ページする必要があります。私はLIMITを使用して私の頭からのリクエストとして質問をスピードアップしています。その後、ページをクリックするたびにクエリが実行されます。そして列はソートされなければならず、それは私の問題です。その列にはどのような種類のデータがあるのか​​わからなかったので、数字または文字+数字の文字にすることができます。それは私が望むようにそれを並べ替える別の方法はありますか? – ace

+0

クエリ自体に 'SORT BY'を使う必要があります。あなたは 'SORT BY cast(col as SIGNED)、col'の助けとなるような式でソートすることができます(これはcharカラムに格納された数値を主な基準として使用します)。 – maaartinus

1

フィールドのデータ型を、文字型ではなく数値データ型に変更します。

プラスのゼロは、データを数値に変換しているので機能しなければなりません。

+0

私は数値型に指定することはできませんので、ユーザーはフィールドを作る人になります。だから、varcharを使用することに決めたので、その特定の列には文字も数値も挿入できません。 – ace

+0

それでは、 "alphanumeric-order-by-in-mysql"の2番目の答えがうまくいかないのはなぜですか? – jzd

+0

なぜ私はデータをどのように挿入したかの順序を示しているので、ソートしていないようです。 – ace

関連する問題