2016-04-15 4 views
0

以下のSQL文では、結果が多少正しく分類されますが、小数点は考慮されません。SQL文の行を数値でソートするのに小数点以下を使用しない

37.5が最上部にある必要があります。

SELECT * FROM wp_postmetaそれは文字列だかのように並べ替えていますので、WHERE meta_value DESC BY meta_key = "win_percentage" ORDER

Array 
(
    [0] => Array 
     (
      [meta_id] => 417 
      [post_id] => 59 
      [meta_key] => win_percentage 
      [meta_value] => 9.3023255814 
     ) 

    [1] => Array 
     (
      [meta_id] => 419 
      [post_id] => 62 
      [meta_key] => win_percentage 
      [meta_value] => 6.66666666667 
     ) 

    [2] => Array 
     (
      [meta_id] => 425 
      [post_id] => 64 
      [meta_key] => win_percentage 
      [meta_value] => 37.5 
     ) 

    [3] => Array 
     (
      [meta_id] => 433 
      [post_id] => 68 
      [meta_key] => win_percentage 
      [meta_value] => 36.5079365079 
     ) 

    [4] => Array 
     (
      [meta_id] => 421 
      [post_id] => 58 
      [meta_key] => win_percentage 
      [meta_value] => 32.8767123288 
     ) 

    [5] => Array 
     (
      [meta_id] => 423 
      [post_id] => 63 
      [meta_key] => win_percentage 
      [meta_value] => 16.6666666667 
     ) 

) 
+0

どのタイプのフィールドがmeta_valueですか?フロート、小数点、またはvarchar? – aynber

+0

それは文字列のソートのように見えます... – Random

+0

そのvarcharこれはすべてのワードプレスのメタ内にあるので、varcharはかなり強制されます。 –

答えて

0

VARCHARは、文字列変数の型です。 6は文字列の3の後に来るので、DESCをソートすると最初に現れます。

あなたは、次のようなものを使用することができます目的をソートするためのフロート/小数点として扱われるために、この特定の列場合:

SELECT * FROM wp_postmeta WHERE meta_key = "win_percentage" ORDER BY CAST(meta_value AS FLOAT) DESC

や数値どちらのタイプを使用しているデータベースがあります。 http://www.w3schools.com/sql/sql_datatypes_general.asp

関連する問題