PHP数组使用一些操作插入到mysql中

时间:2015-07-14 06:04:04

标签: php mysql arrays codeigniter

我的MySQL表包含serials(start,end,quantity,status)

开始 - 开始串行,端到端串行,开始和结束之间的数量差异,状态为“R”或“P”。 假设我已经为用户提供了1-1000个R系列,用户则在1-1000之间输入多个条目。

我正在从用户那里得到一系列连续出版物(已排序)

$arr=array(
array(
'start'=>201,
'end'=>300,
'quantity'=>100),

array(
'start'=>401,
'end'=>600,
'quantity'=>200),

array(
'start'=>701,
'end'=>850,
'quantity'=>150)
)

我希望将表中的记录插入

(开始,结束,数量,状态)

  1. (1200200,R)

  2. (201300100,P)

  3. (301400100,R)

  4. (401600200,P)

  5. (601700100,R)

  6. (701850150,P)

  7. (851,1000,150,R)

  8. 我试过的只会插入R和所有P记录的第一个和最后一个记录,但不会插入R记录之间

    $this->db->where("md5(serial_id)",$serial_id);
            $dd2=$this->db->get("serial")->row_array();
        $arr=array(
                    "start"=>$dd['start_serial_no'],
                    "end"=>$ins_arr[0]['start_serial_no']-1,
                    'quantity'=>$ins_arr[0]['start_serial_no']-$dd['start_serial_no'],
                    'status'=>'R',  
    
                    );
                $this->db->insert('serial',$arr);
        for($i=0;$i<count($ins_arr);$i++)
        {
            $arr=array(
                    "start_serial_no"=>$dd['start_serial_no'],
                    "end_serial_no"=>$ins_arr[0]['start_serial_no']-1,
                    'quantity'=>$ins_arr[0]['start_serial_no']-$dd['start_serial_no'],
                    'status'=>'P',  
                    );
                $this->db->insert('serial',$arr);
    
        }
        $arr=array(
                    "start_serial_no"=>$ins_arr[$i-1]['start_serial_no'],
                    "end_serial_no"=>$dd['end_serial_no'],
                    'quantity'=>$ins_arr[$i-1]['start_serial_no']-$dd['start_serial_no'],
                    'status'=>'R',  
                    );
                $this->db->insert('serial',$arr);
    

3 个答案:

答案 0 :(得分:0)

$这 - &GT; DB-&GT; insert_batch();

批量插入可用于插入您在问题中列出的数组。您可以在此处找到教程。

https://ellislab.com/codeigniter/user-guide/database/active_record.html

答案 1 :(得分:0)

您需要按如下方式对其进行修改。

$this->db->where("md5(serial_id)",$serial_id);
    $dd2=$this->db->get("serial")->row_array();
$arr=array(
            "start"=>$dd['start_serial_no'],
            "end"=>$ins_arr[0]['start_serial_no']-1,
            'quantity'=>$ins_arr[0] ['start_serial_no']-$dd['start_serial_no'],
            'status'=>'R',  

            );
        $this->db->insert('serial',$arr);
for($i=0;$i<count($ins_arr);$i++)
{
    $p_arr=array(
            "start_serial_no"=>$dd['start_serial_no'],
            "end_serial_no"=>$ins_arr[0]['start_serial_no']-1,
            'quantity'=>$ins_arr[0]['start_serial_no']-$dd['start_serial_no'],
            'status'=>'P',  
            );
        $this->db->insert('serial',$p_arr);

      $r_arr=array(
            "start_serial_no"=>$p_arr['start_serial_no'] + $p_arr['quantity'] ,
            "end_serial_no"=>$p_arr['start_serial_no'] + $p_arr['quantity'] + 100,
            'quantity'=> 100,
            'status'=>'R',  
            );
        $this->db->insert('serial',$r_arr);



}
$arr=array(
            "start_serial_no"=>$ins_arr[$i-1]['start_serial_no'],
            "end_serial_no"=>$dd['end_serial_no'],
            'quantity'=>$ins_arr[$i-1]['start_serial_no']-$dd['start_serial_no'],
            'status'=>'R',  
            );
        $this->db->insert('serial',$arr);

答案 2 :(得分:0)

我很接受shanusingh的回答。我做了一些修改。回答其他人有同样的问题

    $this->db->where("md5(serial_id)",$serial_id);
    $dd=$this->db->get("serial")->row_array();
    $arr=array(
                "start_serial_no"=>$dd['start_serial_no'],
                "end_serial_no"=>$ins_arr[0]['start_serial_no']-1,
                'quantity'=>$ins_arr[0]['start_serial_no']-$dd['start_serial_no'],
                'status'=>'R',  
                );
            $this->db->insert('serial',$arr);

    for($i=0;$i<count($ins_arr);$i++)
    {
        $p_arr=array(
                "start_serial_no"=>$ins_arr[$i]['start_serial_no'],
                "end_serial_no"=>$ins_arr[$i]['end_serial_no'],
                'quantity'=>$ins_arr[$i]['end_serial_no']-$ins_arr[$i]['start_serial_no']+1,
                'status'=>'P',  
                );
            $this->db->insert('serial',$p_arr);

        if($i!=count($ins_arr)-1)   
        {
             $r_arr=array(
            "start_serial_no"=>$p_arr['end_serial_no']+1,
            "end_serial_no"=>$ins_arr[$i+1]['start_serial_no']-1,
            'quantity'=> $ins_arr[$i+1]['start_serial_no']-$p_arr['end_serial_no']-1,
            'status'=>'R',  
            );

            $this->db->insert('serial',$r_arr);
        }
    }
    $arr=array(
            "start_serial_no"=>$ins_arr[$i-1]['end_serial_no'],
            "end_serial_no"=>$dd['end_serial_no'],
            'quantity'=>$dd['end_serial_no']-$ins_arr[$i-1]['end_serial_no']+1,
            'status'=>'R',  
            );
            $this->db->insert('serial',$arr);
相关问题