2012-12-18 69 views
0

我在查詢數據庫以將結果集從最高位返回到最低位。但是,似乎查詢並不是完全按照這種方式對結果進行排序。我的代碼如下:SQL查詢無法正確排序結果

$query = mysql_query("SELECT * FROM ".$stats_table." ORDER BY ppg DESC")or die(mysql_error()); 
$count = mysql_num_rows($query); 
$i = 0; 

while($row = mysql_fetch_assoc($query)) 
{ 
$team[$i] = $row['team']; 
    $ppg[$i] = $row['ppg']; 

    $i++; 
} 

for($i=0;$i<$count;$i++) 
{ 
echo "".$ppg[$i]." <br /><br />"; 
} 

當我回聲出分列集我得到以下幾點:

99.7 

98.2 

97.8 

97.4 

97.1 

96.9 

96.8 

96.3 

96.2 

95.5 

94.6 

94.5 

94.3 

93.9 

93.2 

92.8 

92.2 

91.5 

90.8 

90.3 

106.0 

105.9 

104.5 

103.6 

102.6 

101.9 

101.5 

101.3 

100.7 

100.1 

看來,所有的值小於100和100它的作品的。但是,我怎樣才能使這個訂單工作的所有值,而不是在100以內的那些?

感謝,

蘭斯

+1

你將哪種數據類型分配給ppg? – hsuk

+2

** Heads up!** PHP的下一個主要版本是*棄用* mysql_'系列函數。現在將是[切換到PDO](http://php.net/book.pdo)或[mysqli](http://php.net/book.mysqli)的好時機。 – Charles

+0

Awwwww。這很糟糕。難以切換 – Lance

回答

0

ppg雙,真正的或任何數字,而不是VARCHAR。

+0

我把它從varhcar改爲int。但是,現在問題是我不能在那裏有十進制值。 – Lance

+1

所以改變它建議的一個.... – webnoob

+0

改變你的數據類型爲浮動這可能有助於 – freaky

0

使用ORDER BY ABS(PPG),如果你不想碰你的結構

2

更改的數據類型爲數字像雙,真正的,浮動。嘗試一下。

0

你可以讓PHP對它進行排序。

$query = mysql_query("SELECT * FROM ".$stats_table)or die(mysql_error()); 

$i = 0; 
while($row = mysql_fetch_assoc($query)) { 
    $team[$i] = $row['team']; 
    $ppg[$i] = (int)$row['ppg']; 
    $i++; 
} 
sort($ppg, SORT_NUMERIC); 
for($i=0;$i<count($ppg);$i++) { 
    echo $ppg[$i]." <br /><br />"; 
} 
+0

是。我也可以這樣做。比使用mysql_num_rows更快嗎? – Lance

+0

那麼使用count()來計算數組$ ppg肯定比使用mysql_num_rows的計數更聰明(和更安全),因爲數組$ ppg可能具有與mysql_num_rows計數不同數量的項目。 – emilhem