2015-01-23 3 views
0

이므로 지역에 속한 모든 사용자를 표시하는 목록을 작성하려고합니다. 이를 위해 모든 이름을 표시하는 while 루프를 사용하려고합니다. 이 유일한 문제는 다음 또한 "위치 2"모든 사용자에 대해 "3 순위"... 두 위치를 분할하는 방법에 대한 어떤 제안 에코 분명히 것입니다PHP와 mysqli에서 하나의 배열에 대해 여러 개의 while 루프를 작성하므로

<h2>Region 2:</h2> 
<?php 

      //REGION 2: 
      $result = mysqli_query($ExampleDB,"SELECT * FROM members WHERE region=2 ORDER BY user DESC"); 

      while($row = mysqli_fetch_array($result)) 
       { 
       echo "</br>Position 2: "; 
       if ($row['position']==2){ 
       echo"".$row['fname']." ".$row['sname'].", "; 
       } 
       echo "</br>Position 3: "; 
       if ($row['position']==3){ 
       echo"".$row['fname']." ".$row['sname'].", "; 
       } 
       } 
      mysqli_close($dbConnection); 
      } 
?> 

: 아래 코드를 참조하십시오 그래서 while 루프는 에코 이후에 발생합니까? 나는 또한이 같은 동안 루프를 분할하려고하지만 이름의 아무도 나타났다 없습니다 :

   $result = mysqli_query($ExampleDB,"SELECT * FROM members WHERE region=2 ORDER BY user DESC"); 

       echo "</br></br>Position 2: "; 
       while($row2 = mysqli_fetch_array($result)) 
       { 
        if ($row2['position']==2){ 
        echo"".$row2['fname']." ".$row2['sname']." ".$row2['user'].", "; 
        } 
       }   
       echo "</br></br>Position 3: "; 
       while($row3 = mysqli_fetch_array($result)) 
       { 
        if ($row3['position']==3){ 
        echo"".$row['fname']." ".$row['sname'].", "; 
        } 
       } 

가 나는 또한 행 및 그 중 어떤 이름을 생성하지 않은 $로 모두를 유지 그것을 시도했다. while 루프를 어떻게 나눌 수 있습니까? 또는 Position 2,3 헤더 뒤에 배열의 특정 이름을 표시하는 더 좋은 방법이 있습니까?

+0

첫 번째 예제에서는'$ row [ 'position'] == 2'를 사용하고 두 번째 예제에서는'$ row2 [ 'f_pos'] == 2'를 사용합니다. 이것이 비록 문제인지 확실하지 않습니다. – Jeroen

+0

oops는 문구를 단순화하고 두 번째 단어를 바꾸는 것을 잊었습니다. 그들은 실제 코드에서 동일합니다. 수정시 수정 됨 – QuackMan245

+0

@ user1066035 같은 문제가 있는데, 주어진 답을 통해 문제가 해결 되었습니까? –

답변

1
$result = mysqli_query($ExampleDB,"SELECT * FROM members WHERE region=2 ORDER BY user DESC"); 

echo "</br></br>Position 2: "; 
while($row2 = mysqli_fetch_array($result)) 
{ 
    if ($row2['position']==2) 
    { 
     echo"".$row2['fname']." ".$row2['sname']." ".$row2['user'].", "; 
    } 
} 

$result = mysqli_query($ExampleDB,"SELECT * FROM members WHERE region=2 ORDER BY user DESC"); 

echo "</br></br>Position 3: "; 
while($row3 = mysqli_fetch_array($result)) 
{ 
    if ($row3['position']==3) 
    { 
     echo"".$row['fname']." ".$row['sname'].", "; 
    } 
} 

문을 다시 쿼리하면 실제로 정상적으로 작동합니다. 첫 번째 while 루프 가져 오기 배열이 배열의 끝까지옵니다. 그리고 fetch array를 수행하면 아무 것도 반환하지 않습니다. 따라서 다시 쿼리해야합니다.

+0

귀엽지는 모르겠지만 나를 위해 일합니다. 건배! 가능한 경우 대답으로 선택합니다 :) – QuackMan245

+0

첫 번째 while 루프 앞에 $ result2 = $ result를 넣을 수 있고 두 번째 while 루프에는 $ result2를 사용할 수 있습니다. 이것은 mysql에서 다시 질의를 피할 수있다. 훨씬 큰 데이터가있는 경우이를 고려하십시오. mysql_data_seek ($ result, 0)를 사용하여 mysqli_fetch_array를 재설정 할 수도있다. statement – sailesh

+0

그는 또한 결과의 포인터를 다시 원래대로 되돌리기 위해 http://php.net/manual/en/mysqli-result.data-seek.php'$ result-> data_seek (0);'을 사용할 수 있다고 생각한다. 다시 mysqli_query를 수행하는 대신 시작 하시겠습니까? 나 자신을 확인해보십시오. 결코 시도하지 않았습니다. – Jeroen

0

머리글을 처음 출력 한 후 플래그를 설정할 수 있습니다. 이 적합하지 않습니다,하지만 당신의 접근 방식을 재 작업하는 것을 피한다 :

$pos_two_header = true; 
$pos_three_header = true; 

while($row = mysqli_fetch_array($result)) 
    { 
     if ($row['position']==2){ 
      if($pos_two_header) { 
       echo "</br>Position 2: "; 
       $pos_two_header = false; 
      } 
      echo"".$row['fname']." ".$row['sname'].", "; 
     } 
     if ($row['position']==3){ 
      if($pos_three_header) { 
       echo "</br>Position 2: "; 
       $pos_three_header = false; 
      } 
      echo"".$row['fname']." ".$row['sname'].", "; 
     } 
    } 
0

data_seek를 사용하는 대신 쿼리를 두 번째로 실행하는 방법에 대한 제론의 의견을 바탕으로,이 작동하지만 단순히하고자하는 것만 큼 쉬운 일이 아닙니다 0 색인. 결과 집합이 Traversable로 반환되는 PHP 5.4에서이 솔루션을 처리하는 것이 훨씬 쉽습니다. 이와 같이 :

$result = $ExampleDB->query("SELECT * FROM members WHERE region=2 ORDER BY user DESC"); 

foreach($result as $row) 
    { 
     echo "</br>Position 2: "; 
     if ($row['position']==2){ 
      echo"".$row['fname']." ".$row['sname'].", "; 
     } 
    } 

$result->field_seek(0); 

foreach($result as $row) 
    { 
     echo "</br>Position 3: "; 
     if ($row['position']==3){ 
      echo"".$row['fname']." ".$row['sname'].", "; 
     } 
    } 
관련 문제