2013-05-06 27 views
5

アルファベット順に並び替える配列がありますが、最後に番号があります。ここでmysqlのアルファベット順の並びと数字

"SELECT DISTINCT Number FROM database WHERE 1 Order By Number ASC"; 

は、それが現在のソート方法です:

Number 1 
Number 10 
Number 11 
Number 2 
Number 3 
Number 4 
Number 5 
Number 6 
Number 7 
Number 8 
Number 9 
The End 

これは私がそれをソートする方法です:

Number 1 
Number 2 
Number 3 
Number 4 
Number 5 
Number 6 
Number 7 
Number 8 
Number 9 
Number 10 
Number 11 
The End 
+1

数字列のように見えるのは文字列値です。あなたはそれを注文する前に整数にキャストしようとする可能性があります –

+0

私の答えを試してください。それは正常に動作します。 –

+0

[SQLでの自然な並べ替え]の可能な複製(http://stackoverflow.com/questions/153633/natural-sort-in-mysql) – Ejaz

答えて

6

は、別のソート条件を追加します。

Order By LENGTH(Number), Number; 

このより長い数字も大きい数字のために働く; '0' < '1' .... < '9'

+0

これはいつもうまくいくでしょうか。 – Aquillo

+0

@Aquillo私はなぜそれが動作する説明を追加しました。私が間違った結果を与えるケースを見つけることを自由に感じてください:) –

+0

私はこの方法を何年も使っています。できます! +1 – Fluitketel

0

sqlはソート中に文字列を整数にキャストする関数を持っているので、同じ長さの数値に対してはテキスト比較を行うことができます。あなたが別のデータベースを使用している場合は

SELECT DISTINCT Number FROM database Order By CAST(Number AS UNSIGNED) ASC 

は、あなたがに列をキャストする方法をグーグルする必要があります:あなたはMySQLを使用している場合

、これはあなたが望むものを行うために使用したいものですデータベースの整数。

注:他のソリューションのいくつかは動作しますが、ハッキーのようなものです。つまり、クールに見えますが、将来は機能しない可能性があります。上記のあなたが欲しいものを正確に行い、あなたがそれを行うには、「はず」されている方法です。)

+0

'SELECT CAST 11 'AS UNSIGNED) '0'を返します –

+0

なぜ単語番号の文字列を渡していますか " Number 11 "、" 11 "または" Number "という名前の列を渡さないでください –

+0

Try: 'CAST('11 'AS UNSIGNED)'を選択し、正しく' 11 'を返します –

2

はこれを試してください: -

SELECT distinct numberr FROM tablename Order By cast(substring(numberr,7) as unsigned int) ASC ; 

その作業罰金。

アウト置く: -

Number 1 
Number 2 
Number 3 
Number 4 
Number 5 
Number 6 
Number 7 
Number 10 
Number 11 
+0

アルファベット順のソートではありません。 –

+1

これは、最初の文字列が常に7文字の長さである場合にのみ有効です。これは保証できません。 –

+0

はい@TarynEastあなたは正しいです。 –

0
"SELECT DISTINCT Number FROM database WHERE 1 Order By substring_index(Number,'Number',1),cast(substring_index(Number,'Number ',-1) as unsigned int) ASC"; 
+0

「終わり」の場合はどうなりますか? – Aquillo

+0

@Aquillo、 'Number'文字列の代わりに' end'を意味しますか? – Amir

+0

たとえば、提供されている例のように 'Number 9'の代わりに。 – Aquillo

0

少し遅れてパーティーに。しかし、別のアプローチを使うこともできます。クエリの結果を取得し、phpでソートします。ここでこれを試してください。

natsort($results); // results has your query results use natural sort. 
$sorted_array = array_values($the_array); // then reorder the index 

誰かを助けることを願っています。 :)

関連する問題