我们试图在while循环中放一段时间。
第一次运行时,结果显示在列表中(139,140,141)。
第二个列表只显示一个值(1ste troop)。
结果如下:
139
1ste troop
140
141
所以似乎第二次只执行一次。 我该怎么做才能解决这个问题?
echo "<ul>";
while($user = $allUsersintroops->fetch_assoc())
{
if($user['userid'] == $_SESSION['userid'])
{
echo "<li>" . $user['troopid']. " </li>";
while ($mytroops = $alltroops->fetch_assoc())
{
if($user['troopid'] == $mytroops['troopid'])
{
echo "<li>" . $mytroops['description']. " </li>";
}
}
}
}
echo "</ul>";
答案 0 :(得分:2)
内部循环在fetch_assoc
返回false后停止...但是这表示所有找到的结果的结束,并且没有任何行留给下一次迭代。
您应该将$alltroops
中的所有行收集到一个数组中,然后迭代它:
echo "<ul>";
$allTroopsList = array();
while ($mytroops = $alltroops->fetch_assoc()) {
$allTroopsList []= $mytroops;
}
while($user = $allUsersintroops->fetch_assoc()) {
if($user['userid'] == $_SESSION['userid']) {
echo "<li>" . $user['troopid']. " </li>";
foreach($allTroopsList as $mytroops) {
if($user['troopid'] == $mytroops['troopid']) {
echo "<li>" . $mytroops['description']. " </li>";
}
}
}
}
echo "</ul>";
此外,您应该考虑在$allUsersintroops
查询中添加一些过滤,因为您只使用了返回行的一部分,这意味着其余行将从数据库发送到您的代码中原因,浪费时间和带宽。