虽然循环问题

时间:2010-06-15 17:52:42

标签: php mysql

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

然而,它不会继续? 有什么想法可以纠正这个吗? 感谢

7 个答案:

答案 0 :(得分: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 :(得分:1)

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

答案 2 :(得分:1)

您正在更改循环中的$result变量,使其在内部while循环运行后结束。

答案 3 :(得分:1)

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

虽然用一个查询来制作它会更好

答案 4 :(得分: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

答案 5 :(得分: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>
    ";
}

答案 6 :(得分:0)

另一方面 - 为什么在第一行中有GROUP BY日期,当投影列表中的所有内容都是日期时?