0

MySql dbにこのテーブルがあります:

ここに画像の説明を入力

このクエリを実行した後:

SELECT score, count(*) FROM Coaches group by score ORDER BY score DESC

結果表は次のようになります。

ここに画像の説明を入力

PHP では、結果をフェッチし、配列を反復処理して、各コーチが属するグループを特定し、ランキングでの位置を取得しようとしています。したがって、私はこれを書きました:

$groupsOfScoresQuery = "SELECT score, count(*) FROM Coaches group by score ORDER BY score DESC";

$result = mysqli_query($dbc, $groupsOfScoresQuery);

if ($result) {  // query did successfully run
$response['topCoaches'] = array();

    if (mysqli_num_rows($result) > 0)   {   
        while ( $rowScore = mysqli_fetch_array($result, MYSQLI_ASSOC) ) {

            $currentRanking++;
            $score = array(); // temp user array for one group of scores
            $numberOfCoaches; // Number of coaches with this particular number of scores
            $scoresGroup; // Scores in the particular group

            $score["scores"] = $rowScore["score"];
            $score["count"] = $rowScore["count(*)"];
            $numberOfCoaches = $score["count"];
            $scoresGroup = $score["scores"];

            $response["scoresGroup"] = $scoresGroup; // HERE IS THE PROBLEM

.
.
.
more processing
} // end WHILE

$response["scoresGroup"]結果の最後の値が常に含まれるのはなぜですか? この場合、これは123です。これはループの最初の反復であり、$response["scoresGroup"]最初の要素 (474) を保持すると思いましたが、2 番目の反復では 382 を保持する必要があります。ここで何が間違っていますか?結果を取得するために正しい関数を使用していますか? または、目標を達成するために別のループを使用する必要がありますか? 事前に助けてくれてありがとう。

4

4 に答える 4

2

質問の説明を見ると、クエリ結果セットからのすべての結果を格納するための多次元配列を定義する必要があります。

以下のコードスニペットを参照してください

           $groupsOfScoresQuery = "SELECT score, count(*) FROM Coaches group by score ORDER BY score DESC";

         $result = mysqli_query($dbc, $groupsOfScoresQuery);

       if ($result) {  // query did successfully run
          $response['topCoaches'] = array();

          if (mysqli_num_rows($result) > 0)   {   
          while ( $rowScore = mysqli_fetch_array($result, MYSQLI_ASSOC) ) {

          $currentRanking++;
          $score = array(); // temp user array for one group of scores
          $numberOfCoaches; // Number of coaches with this particular number of scores
          $scoresGroup; // Scores in the particular group

         $score["scores"] = $rowScore["score"];
         $score["count"] = $rowScore["count(*)"];
         $numberOfCoaches = $score["count"];
         $scoresGroup = $score["scores"];

         $response["scoresGroup"][] = $scoresGroup; //Notice the array here

         .
         .
         .
         more processing
         } // end WHILE
于 2012-11-01T08:26:55.320 に答える
2

の予想される構造を投稿しませんでした$response。これがあなたがやろうとしていると私が思うことです:

while ($rowScore = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
    $response["scoresGroup"][] = array(
        "scores" => $rowScore["score"],
        "count" => $rowScore["count(*)"]
    );
}
// $response["scoresGroup"][0]["scores"] = 474
// $response["scoresGroup"][0]["count"]  = 1
// $response["scoresGroup"][1]["scores"] = 382
// $response["scoresGroup"][1]["count"]  = 1
// $response["scoresGroup"][2]["scores"] = 123
// $response["scoresGroup"][2]["count"]  = 1

多分:

while ($rowScore = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
    $response["scoresGroup"][$rowScore["score"]] = $rowScore["count(*)"]
}
// $response["scoresGroup"][474] = 1
// $response["scoresGroup"][382] = 1
// $response["scoresGroup"][123] = 1
于 2012-11-01T08:27:28.867 に答える
2
if (mysqli_num_rows($result) > 0)   {   
        while ( $rowScore = mysqli_fetch_array($result, MYSQLI_ASSOC) ) {

        $currentRanking++;
        $score = array(); // temp user array for one group of scores
        $numberOfCoaches; // Number of coaches with this particular number of scores
        $scoresGroup; // Scores in the particular group

        $score[]["scores"] = $rowScore["score"];
        $score[]["count"] = $rowScore["count(*)"];
        $numberOfCoaches[] = $score["count"];
        $scoresGroup[] = $score["scores"];

        $response[]["scoresGroup"] = $scoresGroup; // HERE IS THE PROBLEM
于 2012-11-01T08:22:30.953 に答える
1

ループを実行するたびに $response['scoresGroup'] を設定しているため、最後には最後の要素のみが含まれます。各ループでデータを入れる変数を変更してみてください。

$x++;
$response['scoresGroup' . x] = $scoresGroup;
于 2012-11-01T08:19:46.607 に答える