簡體   English   中英

從php中的mysql查詢中獲取結果數組,同時出現循環問題

[英]Fetching the result array from mysql query in php, while loop issue

我在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),在第二次迭代期間應保持382? 我在這里做錯了什么? 我是否使用正確的函數來獲取結果? 還是應該使用不同的循環來實現我的目標? 我在這里先向您的幫助表示感謝。

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

查看問題的描述,您需要定義一個多維數組,用於存儲查詢結果集中的所有結果。

請參考下面的代碼片段

           $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

您沒有發布$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

每次運行循環時,您都需要設置$ response ['scoresGroup'],因此最后,它僅包含最后一個元素。 嘗試更改在每個循環中將數據放入的變量。

$x++;
$response['scoresGroup' . x] = $scoresGroup;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM