Codeigniter活动记录 - 使用数组中的数据更新查询

时间:2014-02-26 16:46:26

标签: php mysql arrays codeigniter activerecord

我有一个数组本身包含两个数组 - 一个包含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
        )

)

我现在需要做的是根据其ID

更新每个项目的行顺序

不知道从哪一个开始。

最终结果应该类似于

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

2 个答案:

答案 0 :(得分:1)

您可以将数据转换为array arrays,其中包含key => value对(其中键是字段名称)并使用update_batch codeigniters 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格式的理解。第三个参数指定函数用于知道要更新哪一行的字段。

更新批处理将数据分隔100行,然后创建基于案例的查询,从而避免大量查询。

答案 1 :(得分: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