我的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)
)
我希望将表中的记录插入
(开始,结束,数量,状态)
(1200200,R)
(201300100,P)
(301400100,R)
(401600200,P)
(601700100,R)
(701850150,P)
(851,1000,150,R)
我试过的只会插入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);
答案 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);