Почему мой контейнер в цикле циклически перемещает первый элемент?

// current session id $sid = session_id(); // get current cart session $sql = "SELECT * FROM tbl_cart WHERE ct_session_id = '$sid'"; $result = dbQuery($sql); // get all the items in the car category $query = "SELECT pd_id FROM tbl_product WHERE cat_id ='28'"; $r = dbQuery($query); //Cycle through the cart and compare each cart item to the cars to determine if the cart contains a car in it. while($cart = dbFetchAssoc($result)){ while($product = dbFetchAssoc($r)){ echo $cart['pd_id'] . " - "; echo $product['pd_id']. "<br>"; } } 

dbFetchAssoc () – это настраиваемый уровень базы данных, который в основном (mysql_fetch_assoc).

Я пытаюсь взять строки из запроса и использовать эту информацию для сравнения. Вышеприведенный код с инструкциями echo просто эхом для целей отладки. Есть ли определенная причина, что цикл while выходит после вложенного цикла?

Solutions Collecting From Web of "Почему мой контейнер в цикле циклически перемещает первый элемент?"

Да. Вам нужно снова запустить запрос, так как каждый раз, когда вы вызываете dbFetchAssoc($r) вы продвигаете этот курсор.

 $sql = "SELECT * FROM tbl_cart WHERE ct_session_id = '$sid'"; $result = dbQuery($sql); // get all the items in the car category $query = "SELECT pd_id FROM tbl_product WHERE cat_id ='28'"; while($cart = dbFetchAssoc($result)){ $r = dbQuery($query); while($product = dbFetchAssoc($r)){ echo $cart['pd_id'] . " - "; echo $product['pd_id']. "<br>"; } } 

Вот оптимизированная версия, которая не попадает в базу данных. Это специфично для этого конкретного вопроса, хотя и будет столь же плохим выбором, если набор запросов был особенно большим – он сталкивается с проблемами памяти, а не с проблемами скорости.

 $sql = "SELECT * FROM tbl_cart WHERE ct_session_id = '$sid'"; $result = dbQuery($sql); // get all the items in the car category $query = "SELECT pd_id FROM tbl_product WHERE cat_id ='28'"; $r = dbQuery($query); // cache the product results into an array $products = Array(); while($product = dbFetchAssoc($r)){ $products[] = $product['pd_id'] } while($cart = dbFetchAssoc($result)){ $index = 0; while($product = dbFetchAssoc($r)){ echo $cart['pd_id'] . " - "; echo $product[$index]. "<br>"; $index++; } } 

Я не тестировал этот второй код, но идея должна быть достаточно ясной.