2014-12-05 2 views
-6

Это код. Любая помощь ??php вложенный цикл while. Внутренний контур работает только один раз

<?php 

    //connect to the database 
     $con=mysql_connect("localhost","root","") or die("Error in connection"); 
     mysql_select_db("riffadb",$con)or die("Error in database"); 
    // 
     $sql1 ="select category_id,category_code from category"; 
     $res1 = mysql_query($sql1); 

     $sql2 = "select category_id1,product_id from product"; 
     $res2 = mysql_query($sql2); 
     $i=0; 
     $j=1000; 
     while($row1 = mysql_fetch_array($res1)) 
     { 
      echo $row1['category_code']; 
      echo '<br/>'; 
      while($row2 = mysql_fetch_array($res2)) 
      { 
       if($row1['category_code'] == $row2['category_id1']) 
       { 
        $sql3 = "update product set category_id = ".$row1['category_id']." where product_id = ".$row2['product_id']; 
        echo '<br/>'; 
        mysql_query($sql3); 
       } 
      } 
      $i++; 
     } 
     echo $i; 
    ?> 
+1

Как вы знаете внутренний цикл выполняется только один раз? Пожалуйста, объясните подробнее – madforstrength

+0

Запрос обновления работает только для идентификатора первой категории. – Bibin

+0

Не можете ли вы сделать соединение, чтобы получить такие элементы, как 'ON category_id1 = category_code', а затем использовать один цикл while? – Class

ответ

0

Я думаю, вам нужно повторно запросить res2 внутри внешнего цикла или, по крайней мере, сбросить указатель. Второй раз через внешний цикл у вас ничего не осталось в res2, так как вы уже достигли конца

Кроме того, было бы намного более эффективно, если вы настроите запрос res2 во внешнем цикле и добавьте туда чтобы вы соответствовали только идентификатору категории из текущей строки в res1.

Надеюсь, это поможет.

0

Место это в первый цикл:

$sql2 = "select category_id1,product_id from product"; 
$res2 = mysql_query($sql2); 
+1

Может быть, лучше использовать что-то вроде 'mysql_data_seek ($ res2, 0)' после цикла и удалить две строки, которые у вас есть в своем сообщении, а не каждый раз запрашивать базу данных? – Class

1

Попробуйте:

<?php 

//connect to the database 
    $con=mysql_connect("localhost","root","") or die("Error in connection"); 
    mysql_select_db("riffadb",$con)or die("Error in database"); 
// 
    $sql1 ="select category_id,category_code from category"; 
    $res1 = mysql_query($sql1); 


    $i=0; 
    $j=1000; 
    while($row1 = mysql_fetch_array($res1)) 
    { 
     echo $row1['category_code']; 
     echo '<br/>'; 
      // execute second query under the first loop 
     $sql2 = "select category_id1,product_id from product"; 
     $res2 = mysql_query($sql2); 

     while($row2 = mysql_fetch_array($res2)) 
     { 
      if($row1['category_code'] == $row2['category_id1']) 
      { 
       $sql3 = "update product set category_id = ".$row1['category_id']." where product_id = ".$row2['product_id']; 
       echo '<br/>'; 
       mysql_query($sql3); 
      } 
     } 
     $i++; 
    } 
    echo $i; 
?> 
+0

Это приведет к повторному запросу базы данных на каждой итерации внешнего цикла. Лучше сбросить указатель с помощью mysql_data_seek ($ res2, 0); ' – lordvlad

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