0

while ループの中に while を入れようとしています。最初の while が実行され、結果がリスト (139、140、141) に表示されます。2 番目のリストには 1 つの値 (1st 部隊) のみが表示されます。これらは結果です:
139
1st 部隊
140
141

そのため、2 番目の while は 1 回だけ実行されるようです。これを修正するにはどうすればよいですか?

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>";
4

1 に答える 1

2

内部ループは一度falseを返すと停止しfetch_assocます...しかし、それは見つかったすべての結果の終わりを示し、次の反復のために行が残っていません。

からすべての行を$alltroops1回配列に収集してから、それを繰り返す必要があります。

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。つまり、残りの行は理由もなくDBからコードに送信され、時間と帯域幅が無駄になります。

于 2012-05-20T09:44:44.310 に答える