我把以下代码放在一起,问题是每个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循环的数据一起出现。
然而,它不会继续? 有什么想法可以纠正这个吗? 感谢
答案 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日期,当投影列表中的所有内容都是日期时?