【问题标题】:While loop problemswhile循环问题
【发布时间】:2011-03-04 02:58:24
【问题描述】:

我整理了以下代码,问题是每个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 循环的数据都存在。

但是,它没有继续? 有什么想法可以纠正这个吗? 谢谢

【问题讨论】:

    标签: php mysql


    【解决方案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(因为您只是在内部循环中迭代它)。您只需要在内部循环中使用不同的变量。

    【讨论】:

      【解决方案2】:

      您正在覆盖 $result 变量。将第二个更改为$result2 或其他内容,看看会发生什么。确保在设置变量时执行此操作,并在查询中使用它。

      【讨论】:

        【解决方案3】:

        您正在更改循环中的 $result 变量,使其位于内部 while 循环运行后的末尾。

        【讨论】:

          【解决方案4】:

          你只是混合变量。第二个结果和行的名称应该不同。

          虽然最好用一个查询来完成

          【讨论】:

            【解决方案5】:

            嗯,你的问题已经有了答案。

            我只想补充一点,通常您可以编写更智能的 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
            

            【讨论】:

            • 我喜欢未提出问题的帮助。学习就是力量! +1
            【解决方案6】:

            您正在为您的内部循环重复使用相同的变量并打破外部循环。

            将您的内部循环更改为:

            $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>
                ";
            }
            

            【讨论】:

              【解决方案7】:

              换一种说法 - 为什么你在第一行有一个 GROUP BY 日期,而你在投影列表中只有日期?

              【讨论】:

                猜你喜欢
                • 2011-06-19
                • 1970-01-01
                • 1970-01-01
                • 2018-11-05
                • 2013-12-10
                • 2014-05-22
                • 2017-08-11
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多