MySQL ORDER BY与两列相加

时间:2013-02-16 05:13:14

标签: php mysql

我正在创建一个显示行的页面。每行有两列,这是我的问题,评级和用法。首次加载页面时,没有预先排序,页面显示正常。工作时间的代码:

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行。如果代码不起作用(当一个人试图对结果进行排序时),只显示一行(不知道为什么?),并且显示的一个评级行无论如何都不能正确计算。我已经阅读了一些其他的帖子,这些帖子有点处理(这种帮助我制作了糟糕的代码,因为我现在有了它)。但我想我只是不理解我从别人的帖子中得到的东西。

2 个答案:

答案 0 :(得分:0)

最好你可以选择if else进行查询...这样你就可以使用简单的ORDER BY查询..和echo查询生成的输出。

答案 1 :(得分:0)

SUM是一个聚合运算符,如果不使用GROUP BY,则会将整个结果集合并为一行,其中result设置为所有行结果的总和。< / p>

我不确定你为什么要使用SUM,如果你想要添加排序的第一个查询中的行相同,那应该是这样的;

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

如果我误解了您想要的结果集,请告诉我,但SUM没有GROUP BY肯定不是您想要的结果。