php
  • mysql
  • 2010-06-15 67 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

    相关问题