2014-02-26 87 views
0

數據更新查詢我有它本身包含兩個數組的數組 - 一個擁有item ids和其他持有order of the item笨活動記錄 - 利用陣列

他們是這個樣子:

Array 
(
    [item_order] => Array 
     (
      [0] => 0 
      [1] => 1 
      [2] => 2 
     ) 

    [item_id] => Array 
     (
      [0] => 20 
      [1] => 34 
      [2] => 24 
     ) 

) 

什麼我現在需要做的是更新每個項目的訂單根據其編號

不知道從哪裏開始這一個雖然。

最終的結果應該是這個樣子

item_id  item_name  item_order 
------------------------------------ 
20   xxxxx   0 
34   yyyyy   1 
24   zzzzz   2 

回答

1

您可以將數據轉換成的arraysarray,含key =>value雙(其中鍵是字段名稱S)和使用codeigniters的update_batch方法active_record類:

list($item_id, $item_order) = $array_with_data; // or extract($array_with_data); 

$data = []; 

foreach($item_id as $i => $id) { 
$data[] = [ 'item_id' => $id, 'item_order' => $item_order[$i], ]; 
} 

$this->db->update_batch('yourtable', $data, 'item_id'); 

什麼是foreach循環

回事此:

Array 
(
    [item_order] => Array 
     (
     [0] => 0 
     [1] => 1 
     [2] => 2 
    ) 

    [item_id] => Array 
     (
     [0] => 20 
     [1] => 34 
     [2] => 24 
    ) 

) 

變成這個

Array 
( 
    [0] => Array 
    (
    'item_order' => 0 
    'item_id' => 20 
) 
    [1] => Array 
    (
    'item_order' => 1 
    'item_id' => 34 
) 
    [2] => Array 
    (
    'item_order' => 2 
    'item_id' => 24 
) 
) 

這下面是格式update_batch t和。第三個參數指定一個由函數用來知道要更新哪一行的字段。

更新批次將數據分隔100行,然後創建基於案例的查詢,從而避免大量查詢。

+0

我已經稍微改變了數組。這會改變你的答案嗎?你在做什麼看起來像我想做的事情... – Tom

0

嘗試通過使功能

$item_ids = $item['item_id']; 
$orders = $item['item_order']; 
if (!empty($item_ids) && !empty($orders)) { 
    for ($i = 0; $i < count($item_ids); $i++) { 
     $data = array('item_order' => $orders[$i]); 
     $this->db->where('item_id', $item_ids[$i]); 
     $this->db->update('yourtablename', $data); 
    } 
} 

Updating Data這個模型中的

+0

有沒有辦法做到這一點,而不必循環,併爲每一行做一個新的更新查詢? – Tom

+0

我想你沒有必要遍歷數組,因爲你無法按順序排列ID號 –

+0

@Tom看到我的答案,它不使用更新週期 – baldrs