2013-07-25 35 views
0

我現在有這個循環,但它涉及調用數據庫5到10次。有沒有一種方法我可以只調用一次,或許有一段時間循環,或任何其他任何人都可以想到的替代方法,因爲它會減慢行動。將foreach更改爲while循環以保存mysql查詢

foreach($_SESSION['cart_array'] as $each_item) { 
    $item_id = $each_item['item_id']; 
    $each_quantity = $each_item['quantity']; 
    $item_qry = mysql_query("SELECT * FROM `products` WHERE `products_id`=$item_id"); 
    $item_row = mysql_fetch_assoc($item_qry); 
    $product_price = $item_row['products_price']; 
    $total_price += $product_price * $each_quantity; 
} 

回答

2

是的,你可能只是一次選擇的所有行:

$total_price = 0; 
if (!empty($_SESSION["cart_array"])) { 
    $query = "SELECT `products_price`, `products_id` FROM `products` WHERE `products_id` IN ("; 
    $query .= implode(", ", array_map(function ($item) { return $item["item_id"]; }, $_SESSION['cart_array'])); 
    $query .= ")"; 
    $result = mysql_query($query); 

    while ($row = mysql_fetch_assoc($result)) 
     $items[$row["products_id"]] = $row["products_price"]; 

    foreach ($_SESSION["cart_array"] as $item) 
     $total_price += $item["quantity"] * $items[$item["item_id"]]; 
} 
+0

我將$ data重命名爲$ item,因爲我認爲這是一個錯誤,但是我得到了「注意:未定義偏移:275在C:\ xampp \ htdocs \ customers \ msl \ test-array3.php on line 19」 – Source

+0

@源是啊,只是修好了,對不起。它現在工作嗎? – bwoebi

+1

你也可以建立一個CSV值列表,並使用'WHERE products_id IN(1,2,3,4,5)' – Scuzzy

0

一個查詢的解決方案:

$item_id_array = array(); 
$item_to_quant = array(); 
foreach($_SESSION['cart_array'] as $each_item) 
{ 
    $item_id_array[] = $each_item['item_id']; 

    $item_to_quant[$each_item['item_id']] = $each_item['quantity']; 
} 

$item_qry = mysql_query("SELECT * FROM `products` WHERE `products_id` IN (" . implode(',', $item_id_array) . ")"); 


$total_price = 0; 
$results  = array(); 

while ($item_row = mysql_fetch_assoc($item_qry)) 
{ 
    //add total price to result array 
    $item_row['total_items_price'] = $item_row['products_price'] * $item_to_quant[$item_row['products_id']]; 

    $results[] = $item_row; 

    $total_price += $item_row['total_item_price']; 
} 

你得到的結果陣列和總價var當成結果。

+0

這會產生一個比我最初的foreach更快的結果嗎? – Source

+0

@Source它與我的實現一樣快± – bwoebi

+0

是一個查詢,如果您擁有多個產品,速度應該會更快。但是,對於單品來說,速度並不快:)另外,請確保您在數據庫中的products_id字段上有索引。 –