// 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 выходит после вложенного цикла?
Да. Вам нужно снова запустить запрос, так как каждый раз, когда вы вызываете 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++; } }
Я не тестировал этот второй код, но идея должна быть достаточно ясной.