2012-04-12 3 views
0

PHPでデータベース内のテーブルをクエリしています。フィールドの一つは、「ランク」という列であり、次のようなデータを持っている:MySQLクエリ結果を英数字フィールドでソート

none 
1-bronze 
2-silver 
3-gold 
... 
10-ambassador 
11-president 

私は「ランク」欄に基づいて結果を並べ替えることができるようにしたいです。フィールドがどんな結果が「なし」は除外されていない得るので、あなたは既に推測できるとおり、それらが今の結果は次のように戻って来ている、の要因ではありません:。もちろん

1-bronze 
10-ambassador 
11-president 
2-silver 
3-gold 

、私はのための希望します次のようにソートされます。

1-bronze 
2-silver 
3-gold 
... 
10-ambassador 
11-president 

今すぐクエリがオブジェクトとして返されています。私はnatsort、sort、array_multisortのような異なるソートオプションを試しましたが、それができると確信する方法で動作させることはできませんでした。可能であれば、結果をオブジェクト形式に保つことをお勧めします。私は次のステップでビューにデータを渡しています。オブジェクトをビューに渡してそこで作業するのは完全に受け入れられます。結局のところ問題ではありません。 :)

ご協力いただきありがとうございます。私は意味をなさないと思っています。

+6

は数のような音と説明が別々の列でなければなりません... –

+0

をそうランク欄に複数のデータポイントがあることができますか?そうであれば、スキーマのような音は確かにデザインされました。 –

+0

1,2,3位で青銅、銀、金はDBの異なる分野にありますか? –

答えて

0

を使用してPHPでの並べ替え、それを取得します。私はあなたがオブジェクトを取得している場合は、それはあなたが割り当てるフィールドで配列をソートします。この

function arraySubSort($array, $subkey, $sort = 'asort') 
{ 
    foreach($array as $key => $value) 
    { 
    $temp[$key] = strtolower($value[$subkey]); 
    } 

    $sort($temp); 
    foreach($temp as $key => $value) 
    { 
    $result[] = $array[$key]; 
    } 
    return $result; 
} 

$data = $your_array; 
$field = 'ranks'; 
arraySubSort($data,$field); 

を使用し、その後オブジェクトを配列に変換する必要がありますと仮定します。複数のレコードを取得している場合は、ソートに使用することをお勧めします。これは動作します

0

は、配列の値にnatsort()ソートするこの機能を使用する方法についてどのように

Natsort

0

-

SELECT alphanumeric, integer FROM sorting_test ORDER BY LENGTH(alphanumeric), alphanumeric 

ソース - Natural Sort in MySQL

関連する問題