4

array()ある人が通った学校のを取得します。ユーザーのsarah@gmail.com場合、配列にはdegree彼女が獲得した 3 つの があります。私のテーブルには、彼女の 3 度のうち 2 つしかありません。

テーブルにまだ存在しないサラの学位を挿入する最も簡単な方法は何ですか?

開始表:

email            school    degree 

d@d.com          Yale      BA
d@d.com          Emery     PHD
a@a.com          ClownU    BS
sarah@gmail.com  Harvard   BA
sarah@gmail.com  Harvard   Masters

終了テーブル:

email            school    degree 

d@d.com          Yale      BA
d@d.com          Emery     PHD
a@a.com          ClownU    BS
sarah@gmail.com  Harvard   BA
sarah@gmail.com  Harvard   Masters
sarah@gmail.com  Harvard   PHD

私が検討したオプション:

  1. サラの記録をすべて削除します。sarah のすべてのレコードを再挿入します。
  2. 各レコードについて、存在するかどうかを確認します。そうであれば、何もせず、記録を書きます。
  3. 特定のレコードが存在しない場合に update_batch または inserts_batch を実行する魔法の CI 関数はありますか?
4

3 に答える 3

0

私はあなたのように同じ問題を抱えていましたが、次のように解決しました。1-必要なユーザーのすべてのレコードを削除し、コードブローのようにバッチを挿入します。

           $employer_office        = $this->input->post('employer_office');
            $emp_job_type           = $this->input->post('job_type');
            $job_title              = $this->input->post('job_title');
            $job_appointment_date   = $this->input->post('job_appointment_date');
            $job_duration           = $this->input->post('job_duration');
            $job_place              = $this->input->post('job_place');
            $type_of_relation       = $this->input->post('type_of_relation');
            $monthly_salary         = $this->input->post('monthly_salary');
            $remarks                = $this->input->post('remarks');

            $all_array = array();

            if($employer_office)
            {
                if(is_array($employer_office))
                {

                   for($j=0; $j<count($employer_office); $j++)
                   {


                       $form_arr   = array(
                                    'employer_office'      =>$employer_office[$j],
                                    'job_type'             =>$emp_job_type[$j],
                                    'job_title'            =>$job_title[$j],
                                    'job_appointment_date' =>change_datei($job_appointment_date[$j]),
                                    'job_duration'         =>$job_duration[$j],
                                    'job_place'            =>$job_place[$j],
                                    'type_of_relation'     =>$type_of_relation[$j],
                                    'monthly_salary'       =>$monthly_salary[$j],
                                    'remarks'              =>$remarks[$j],
                                    'regdate'              =>date('Y-m-d H:m:s'),
                                    'userid'               =>$id
                                    );
                                    array_push($all_array, $form_arr);
                   }



                }
            }

            if($this->history_model->delete_all('ast_jobs_history',  $id)==TRUE)
            {
                if($this->history_model->all_insert('ast_jobs_history', $all_array)==TRUE)
                {
                    $this->session->set_flashdata("msg","<span class='m_success'>".$this->lang->line('global_update_success')."</span>");
                    redirect('history/home/list_dy','refresh');
                }
                else
                {
                    $this->session->set_flashdata("msg","<span class='m_error'>".$this->lang->line('global_update_error')."</span>");
                    redirect('history/home/list_dy','refresh');
                }
            }
            else
            {
                $this->load->view('unauthorized');
            }

そしてモデルinsert_batchの中でそれ。

        function all_insert($tbl, $data=array())
        {
            if(is_array($data))
            {
                $this->db->trans_start();
                $this->db->insert_batch($tbl,$data);
                $this->db->trans_complete();
                return TRUE;
            }
            else
            {
                return FALSE;
            }
        }

いくつかの変更をもたらします。これにより、問題を解決する方法のヒントが得られることを願っています.

または、特定の ID のレコードを削除したくない場合はクエリを実行し、ID に従ってデータを取得し、array_search() または in_array() 関数を使用して投稿されたデータをフィルタリングし、挿入するレコードを取得することもできますそれをデータベースに挿入します。

于 2013-08-12T05:49:57.567 に答える
0

レコードに同じ ID を保持することが重要でない場合は、すべてのデータを削除して再挿入してください。古いレコードに同じ ID を保持したい場合は、それを削除することもできますが、最初に DB にクエリを実行して ID を取得し、それらを使用して配列を作成する必要があります。その後、すべての新しいデータを挿入できます。

しかし、もし私があなたなら、DB を調べて既存のレコードを探す関数を作成します。レコードが存在する場合は、それを更新します。そうでない場合は、新しいものを作成します。この問題を解決する最もクリーンな方法だと思います。

于 2013-08-12T08:33:37.337 に答える