0

行が表示されるページを作成しています。各行には、私の質問のポイントである評価と使用法である 2 つの列があります。ページが最初にロードされるとき、事前ソートは行われず、ページは問題なく表示されます。動作している場合のコード:

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 行が表示されます。(結果を並べ替えようとしたときに) 機能しないコードでは、1 行しか表示されず (理由がわからない?)、表示される 1 つの評価行はとにかく正しく計算されません。私はこれに対処する他の投稿をたくさん読みました (これは、現在持っている悪いコードを作成するのに役立ちました)。しかし、他の人の投稿から得たものを理解していないだけだと思います。

4

2 に答える 2

0

if else for query...を使用すると、単純なORDER BYクエリを使用して、クエリ生成出力をエコーすることができます。

于 2013-02-16T05:32:27.030 に答える
0

SUMは集計演算子であり、それを使用せずGROUP BYに使用すると、結果セット全体が 1 つの行に折りたたまれresult、すべての行の結果の合計に設定されます。

なぜ使用SUMしているのかまったくわかりません。順序を追加した最初のクエリと同じ行が必要な場合は、次のようにする必要があります。

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

あなたの希望する結果セットを誤解しているSUM場合GROUP BYはお知らせください。

于 2013-02-16T05:49:52.867 に答える