2012-08-31 167 views
0
// 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)的自定義數據庫層。爲什麼我的容器while循環僅循環第一個項目?

我試圖從查詢中獲取行並使用該信息進行比較。使用echo語句的上面的代碼只是迴應調試目的。是否有一個特定的原因,循環嵌套後退出while循環?

+0

what sizeof(dbFetchAssoc($ r))說? –

回答

2

是的。您需要再次運行查詢,因爲每次您致電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++; 
    } 
} 

我還沒有測試過這個第二個代碼,但這個想法應該足夠清楚。

+1

或者可能運行該查詢一次,因爲它似乎是靜態的,並緩存結果在數組或其他東西。 –

+0

我會注意到,可能有更有效的方法來做你想做的事情,但這是對問題的回答。 – moopet

+0

***更新**這是我的問題的解決方案。謝謝你。 Moopet如果你有時間展示如何更好地處理這個問題的例子,請分享一下,如果它可以幫助整個應用程序的速度。 – Duice352

相關問題