php
  • mysql
  • 2010-06-15 119 views 0 likes 
    0

    我把以下代碼放在一起,問題是每個while循環只返回一組數據。雖然循環問題

    $result = mysql_query("SELECT date FROM ".TBL_FIXTURES." WHERE compname = '$comp_name' GROUP BY date"); 
        $i = 1; 
        echo "<table cellspacing=\"10\" style='border: 1px dotted' width=\"300\" bgcolor=\"#eeeeee\">"; 
        while ($row = mysql_fetch_assoc($result)) 
        { 
         $date=date("F j Y", $row['date']); 
         echo $date; 
    
         echo " 
         <tr> 
         <td>Fixture $i - Deadline on $date</td> 
         </tr> 
         "; 
         $result = mysql_query("SELECT * FROM ".TBL_FIXTURES." WHERE compname = '$comp_name' AND date = '$row[date]' ORDER BY date"); 
         while ($row = mysql_fetch_assoc($result)) 
         { 
          extract ($row); 
          echo " 
          <tr> 
          <td>$home_user - $home_team V $away_user - $away_team</td> 
          </tr> 
          "; 
         } 
         $i++; 
    
        } 
        echo "</table>"; 
    

    我應該得到很多日期,然後每組夾具下面。 目前,第一個while循環的第一行和第二個while循環的數據一起出現。

    但是,它不會繼續? 任何想法,我可以糾正這一點? 感謝

    回答

    1

    更換
    $result = mysql_query("SELECT * FROM ".TBL_FIXTURES." WHERE compname = '$comp_name' AND date = '$row[date]' ORDER BY date");
    while ($row = mysql_fetch_assoc($result))

    $result1 = mysql_query("SELECT * FROM ".TBL_FIXTURES." WHERE compname = '$comp_name' AND date = '$row[date]' ORDER BY date"); 
        while ($row = mysql_fetch_assoc($result1))` 
    

    與您現有的代碼會發生什麼事是,執行內部while,下一次調用(外部環路),以mysql_fetch_assoc($result)後始終返回false(因爲你剛剛通過迭代它在內部循環中)。所有你需要的是在內部循環中使用一個不同的變量。

    1

    您正在覆蓋$result變量。將第二個更改爲$result2或其他東西,看看會發生什麼。確保在設置變量時執行此操作,並在查詢中使用它。

    1

    您正在更改您的循環中的$result變量,因此它在內部while循環運行後處於末尾。

    1

    你只是混合變量。第二個結果和行應該命名不同。

    雖然這將是更好地與一個單一的查詢

    0

    你是在重複使用相同的變量爲您的內環和突破外環做出來。

    您內環更改爲類似:

    $result2 = mysql_query("SELECT * FROM ".TBL_FIXTURES." WHERE compname = '$comp_name' AND date = '$row[date]' ORDER BY date"); 
    while ($row2 = mysql_fetch_assoc($result2)) 
    { 
        extract ($row2); 
        echo " 
        <tr> 
        <td>$home_user - $home_team V $away_user - $away_team</td> 
        </tr> 
        "; 
    } 
    
    0

    在不同的音符 - 爲什麼你有一個GROUP BY日的第一排,當你在投影名單已經是幾號?

    1

    那麼你已經得到了你的問題的答案。

    我只想補充一點,通常你可以編寫一個更智能的SQL查詢,並在沒有內部查詢的情況下管理它的循環。如果你有1個查詢,而不是N + 1,你的代碼會更快地工作。

    LEFT JOIN通常可以用來代替內部循環。例如:

    SELECT DISTINCT A.date, B.* FROM table_fixtures A 
    LEFT JOIN table_fixtures B ON A.date = B.date 
    WHERE B.compname = "a value" 
    

    但是這一次它看起來不合邏輯。我認爲你實際上做的是可以用這樣的簡單查詢實現的:

    SELECT * FROM table ORDER WHERE compname="something" ORDER BY date 
    
    +0

    我喜歡對未提問的問題的幫助。學習就是力量! +1 – hookedonwinter 2010-06-15 18:08:48

    相關問題