【发布时间】:2015-07-14 06:04:03
【问题描述】:
我有一个包含 serials(start,end,quantity,status) 的 MySQL 表。
start-start 序列,end-end 序列,数量- 开始和结束之间的差异,状态是'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,200,200,R)
(201,300,100,P)
(301,400,100,R)
(401,600,200,P)
(601,700,100,R)
(701,850,150,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);
【问题讨论】:
-
为什么需要指定的数量,在我看来这是结束和开始之间的简单减法? (准确地说是 end -start -1)?目前,您的表格尚未标准化,除非是非常极端的情况,否则这几乎总是一件坏事。
-
注意点,会解决这个问题,但请您考虑一下主要问题
-
我不能,因为我不熟悉 codeigniter,抱歉。但我可以在 DB 理论方面提供帮助,因此是评论而不是答案:) 无论如何,祝你好运。
标签: php mysql arrays codeigniter