php - Codeigniter 事件记录 - 使用数组中的数据更新查询

标签 php mysql arrays codeigniter activerecord

我有一个数组,它本身包含两个数组 - 一个保存项目 ID,另一个保存项目的顺序

它们看起来像这样:

    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

最佳答案

您可以将数据转换为数组数组,其中包含 => 对(其中键是字段名称)并使用 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行分隔,然后创建基于案例的查询,从而避免大量查询。

关于php - Codeigniter 事件记录 - 使用数组中的数据更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22047807/

相关文章:

php - Plupload 不上传文件

mysql - 具有内连接、子选择和限制的 SQL 选择

sql - 从嵌套在 CASE MySQL 中的 SELECT 返回多列

c - 如何在 C 程序中将一个长整数与不同的数字相乘?

php - 我如何在 Joomla 中设置内容类型?

带有 MySQL 的 PHP 仅对表的第一行返回正确的结果

php - 如何使用php将数组元素推送到另一个数组中的特定位置

mysql - 导入的记录在 mySQL 中不可见

c++ - 数组溢出 C++(在 arr[0])?

c++ - 初始化类的 std::array 类型的继承成员 var 的最佳方法?