2013-02-16 30 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查询生成的输出。