[英]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.