【问题标题】:PHP array insert into mysql using some operationsPHP数组使用一些操作插入mysql
【发布时间】: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. (1,200,200,R)

  2. (201,300,100,P)

  3. (301,400,100,R)

  4. (401,600,200,P)

  5. (601,700,100,R)

  6. (701,850,150,P)

  7. (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


【解决方案1】:

你需要修改如下。

$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);

【讨论】:

  • 好吧,看起来不错,但你为什么要拿100个恒定数量。
  • 我只是添加了添加R值所需的逻辑,您可以根据需要进行修改。
  • 否,但我希望该逻辑添加 R 值,因为 start 和 end no 会有所不同,因此它们之间的差异(即数量)
【解决方案2】:

$this->db->insert_batch();

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

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

【讨论】:

  • 你不懂问题,我知道 insert_batch(),我想插入这些值(见 1 到 7 条记录)。
【解决方案3】:

我接受了 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2015-10-11
    • 1970-01-01
    • 2015-11-11
    • 2012-04-21
    相关资源
    最近更新 更多