繁体   English   中英

While循环问题

[英]While loop problems

我将以下代码放在一起,问题是每个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循环的数据。

但是,它不会继续吗? 有什么想法可以纠正吗? 谢谢

更换
$result = mysql_query("SELECT * FROM ".TBL_FIXTURES." WHERE compname = '$comp_name' AND date = '$row[date]' ORDER BY date");
while ($row = mysql_fetch_assoc($result))
$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)下一次调用(在外部循环中mysql_fetch_assoc($result)总是返回false(因为您只是在内部循环中对其进行了迭代)。 您需要做的就是在内部循环中使用其他变量。

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

您正在循环中更改$result变量,因此它在内部while循环运行后结束。

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

尽管最好只执行一次查询

好了,您已经找到了问题的答案。

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

您正在为内部循环重用相同的变量,并破坏了外部循环。

将您的内循环更改为:

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

另外,在投影列表中只有日期的情况下,为什么第一行有GROUP BY日期?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM