2016-11-18 7 views
0

私は最初に数値を格納するプログラムを作成していますが、その列に文字と単語がありますので、VARCHARに数値を格納しました。今PHP ORDER BYはそれを想定していません

、私はこのコードを使用しています:

SELECT * FROM biedingen WHERE bod_refferentie=$item ORDER BY bod_bedrag DESC LIMIT 5 

を、出力は次のとおりです。

9 

27 

私はvarchar型に数値を格納するために取得する方法はありますが、それでも上記と同じ方法を使用して注文することができますか?

+0

あなたの問題は何ですか?あなたのデータベースにどのようにリストされていますか? – Soheyl

+2

PHPコードとデータベース構造がなければ何も分かりません。 – Manikiran

+0

どの列が出力されていますか? –

答えて

6

あなたのbod_bedrag列はvarcharまたはその他の数値ではないようです。したがって、MySQLは数値ではなくテキストとして列をソートします。ここでは、この一桁が二桁の前に現れる理由など、説明

回避策の一つは、注文時に数値型にbod_bedrag列をキャストすることです:

SELECT * 
FROM biedingen 
WHERE bod_refferentie=$item 
ORDER BY CAST(bod_bedrag AS SIGNED) DESC 
LIMIT 5 

一つ気の利いた選択肢は、実際にvarchar数字をソートするために働くことを認識し、 と同じの長さです。私が意味するところは、100, 305, 900があり、昇順にソートされていれば、この注文を得るということです。キャストを避ける別のオプションがあります:

SELECT * 
FROM biedingen 
WHERE bod_refferentie=$item 
ORDER BY CHAR_LENGTH(bod_bedrag) DESC, 
     bod_bedrag DESC 
LIMIT 5 
関連する問題