2012-06-23 2 views
2

Я тестировал подключение петли вложенный Хотя заявления так:PHP Вложенного Хотя цикл не работает с mysql_fetch_assoc

$count1 = 0; 

while ($count1 < 3) { 
$count1++; 
$count2 = 0; 
echo "count1: ".$count1."<br />"; 

    while ($count2 < 3) { 
    $count2++; 
    echo "count2: ".$count2."<br />"; 
    } 
} 

Это отлично работает (зацикливание три раза каждые) с результатами:

count1: 1 
count2: 1 
count2: 2 
count2: 3 
count1: 2 
count2: 1 
count2: 2 
count2: 3 
count1: 3 
count2: 1 
count2: 2 
count2: 3 

Тогда я попробовал то же самое с циклом с использованием mysql_fetch_assoc ($ ContactsInterests - это двухрядный ассоциативный массив, а $ LatestNews - 50 строк), то есть

$CI_count = 0; 

while ($CI_Row = mysql_fetch_assoc($ContactsInterests)) { //loop thru interests 
$CI_count++; 
$LN_count = 0; 
echo "CI_count: ".$CI_count."<br />"; 

while ($LN_Row = mysql_fetch_assoc($LatestNews)) { //loop thru news 
    $LN_count++; 
    echo "LN_count: ".$LN_count."<br />"; 

} 
} 

Результаты:

CI_count: 1 
LN_count: 1 
LN_count: 2 
... 
LN_count: 50 
LN_count: 51 
CI_count: 2 

Но где его вторая итерация LN_count? Я не понимаю, почему LN_count не увеличивал второй раз.

Помогите оценить.

+1

mysql_data_seek ($ результат, 0) – goat

+0

в верхней добавить $ LN_Row = массив(); Затем, в конце первого цикла while добавьте сброс ($ LN_Row); – arijeet

+0

@ redskins80 '$ LN_Row' содержит только последнее значение, переданное' mysql_fetch_assoc' ... поэтому он не будет заполнять '$ LN_Row', если вы не сделаете что-то вроде этого' $ LN_Row [] = mysql_fetch_assoc' –

ответ

3

mysql_fetch_assoc делает итерации для типа "результат MySQL". Ищет индекс для каждой выборки. вы должны использовать mysql_data_seek, чтобы перейти к первому результату;

<?php 

    $CI_count = 0; 

    while ($CI_Row = mysql_fetch_assoc($ContactsInterests)) { //loop thru interests 
     $CI_count++; 
     $LN_count = 0; 
     echo "CI_count: ".$CI_count."<br />"; 

     mysql_data_seek($LatestNews,0); 
     while ($LN_Row = mysql_fetch_assoc($LatestNews)) { //loop thru news 
      $LN_count++; 
      echo "LN_count: ".$LN_count."<br />"; 

     } 
    } 
+0

Фантастический! Спасибо, Туфан. Работает как шарм. – Jeremy

0

Поскольку результаты были исчерпаны. Вы прошли через все из них ... Если вы хотите снова зациклиться, вам придется повторно заполнить переменную $ LatestNews.

0

mysql_fetch_assoc() выдает по очереди строки источника, когда вы будете на втором этапе первого цикла, вы не будете иметь никаких строк в исходной переменной.

Вам нужно поместить результаты второго запроса в массив, а затем закодировать массив и не использовать mysql_fetch_assoc.

Смежные вопросы