2013-02-16 354 views
0

我正在創建一個顯示行的頁面。每行有兩列,這是我的問題,評級和使用的關鍵。第一次加載頁面時,沒有預分頁,頁面顯示正常。代碼當它工作:MySQL ORDER BY與兩個列相加

if (!$sortby) { 

$getdata = mysql_query("select * FROM traditional") or die(mysql_error()); 

while($data = mysql_fetch_array($getdata)){ 

$category = $data["category"]; 
$overview = $data["overview"]; 
$ratingcount = $data["ratingcount"]; 
$ratingscore = $data["ratingscore"]; 
$usage = $data["usage"]; 
$location = $data["location"]; 
$calculaterating = $ratingscore/$ratingcount; 
if (!$calculaterating) { 
$rating = "None"; 
} else { 
$rating = $calculaterating; 
} 

echo "</tr>"; 
echo "<tr colspan='4'>"; 
echo "<td class='selectcategory' width='40%'>"; 
echo "<a href='$location'>$category</a>"; 
echo "</td>"; 
echo "<td class='categorymenu' style='vertical-align: middle; text-align: left; 
padding: 5px;' width='40%'>"; 
echo $overview; 
echo "</td>"; 
echo "<td class='categorymenu' width='10%'>"; 
echo $rating; 
echo "</td>"; 
echo "<td class='categorymenu' width='10%'>"; 
echo $usage; 
echo "</td>"; 

} 

這裏的東西停止工作。頁面上有一個下拉菜單,允許用戶按照使用情況或評分進行排序。當他們選擇一個頁面刷新時,$ sortby通過評分或使用進行填充。下面是代碼的其餘部分,當事情停止時:

} else { 

if ($sortby = "rating") { 
$sort = "rating"; 
} else { 
$sort = "`usage`"; 
} 

$getdata = mysql_query("select category,overview,SUM(ratingscore/ratingcount) as 
'rating',`usage`,location FROM traditional ORDER BY $sort DESC") or die(mysql_error()); 

while($data = mysql_fetch_array($getdata)){ 

$category = $data["category"]; 
$overview = $data["overview"]; 
$rating = $data["rating"]; 
$usage = $data["usage"]; 
$location = $data["location"]; 

echo "</tr>"; 
echo "<tr colspan='4'>"; 
echo "<td class='selectcategory' width='40%'>"; 
echo "<a href='$location'>$category</a>"; 
echo "</td>"; 
echo "<td class='categorymenu' style='vertical-align: middle; text-align: left; 
padding: 5px;' width='40%'>"; 
echo $overview; 
echo "</td>"; 
echo "<td class='categorymenu' width='10%'>"; 
echo $rating; 
echo "</td>"; 
echo "<td class='categorymenu' width='10%'>"; 
echo $usage; 
echo "</td>"; 

} 

} 

當$ sortby未填充時,顯示大約10行。如果代碼不工作(當您嘗試對結果進行排序時),則只會顯示一行(不知道爲什麼?),並且顯示的一個評級行無法正確計算。我已經閱讀了許多其他類似的文章(這些文章幫助我製作了不正確的代碼,正如我現在所掌握的那樣)。但我想我只是不理解我從別人的帖子中得到的東西。

非常感謝您的幫助。

+0

第二個選擇中的'rating'是不正確的。別名不應該是字符串(這就是'''將'rating'轉換爲''''的字符串,如果這是一個派生字段並且不存在於表中的字段中,那麼按'rating'排序將會失敗,列「錯誤 – 2013-02-16 05:15:44

+0

不,這是我誤解了另一篇文章的代碼,我認爲這樣做會創建一個名爲rating的臨時」列「,至少我猜想那就是這樣做的,我只是兩列,我會第一次注意到這個作品)存儲爲評分數量和評分的總得分,這給我輸出的平均值,我只是無法弄清楚如何按平均輸出進行排序 – 2013-02-16 05:19:37

+0

任何關於如何按照平均評分排序的建議,因爲它是在代碼部分中計算的 – 2013-02-16 05:21:32

回答

0

SUM是一個集合運算符,使用它而不使用GROUP BY會使整個結果集合合成一行,其中result設置爲所有行結果的總和。

我不知道你爲什麼要使用SUM,如果你想在第一個查詢中添加相同的行,只需添加順序,它應該是類似的;

SELECT category, overview, ratingscore/ratingcount AS rating, 
    `usage`, location FROM traditional ORDER BY $sort DESC 

如果我誤解你期望的結果集,讓我知道,但是SUM沒有GROUP BY絕對不是你在你的情況下,想要的東西。

+0

這是問題所在。在你發佈這個之前就想出了它。感謝您花時間回答。 – 2013-02-16 06:02:16

0

更好的是你可以去如果其他的查詢......以便您可以使用簡單的ORDER BY查詢..和echo查詢生成的輸出。