2016-12-19 12 views
0

このメソッドから取得するレコードは400以上あり、ページをロードするのにほとんど2分かかります。だから、このメソッドの読み込み時間を減らす方法を教えてください。データの読み込み時間を短縮する方法mysql、codeigniter

function teacher_attendance_selector() 

    { 

     $data['year']  = $this->input->post('year'); 
     $data['timestamp'] =strtotime($this->input->post('timestamp')); 
     $query = $this->db->get_where('teacher_attendance' ,array(
        'teacher_id'=>$data['teacher_id'], 
      'year'=>$data['year'], 

     )); 



     if($query->num_rows() < 1) { 
      $teachers = $this->db->get_where('teacher' , array(

      ))->result_array(); 

      foreach($teachers as $row) { 
       $attn_data['year']  = $data['year']; 
       $attn_data['timestamp'] = $data['timestamp']; 
       $attn_data['teacher_id'] = $row['teacher_id']; 

       $this->db->insert('teacher_attendance' , $attn_data); 
      } 

     } 
    redirect(base_url().'index.php?admin/manage_teacher_attendance_view/'.$data['timestamp'],'refresh'); 
     } 
+0

避けクエリはたくさんのに役立ちます。 –

+0

[このphp/mysqlコードをスピードアップする方法]の重複の可能性があります(http://stackoverflow.com/questions/36034815/how-to-speed-up-this-php-mysql-code) – Walf

+0

クエリループなしteacher_attendanceテーブルに挿入してください。これは現時点で起こっている必要があります – sud

答えて

0

挿入クエリに膨大な時間がかかります。 以下に示す方法に従って、すべてのデータを1つの配列に格納してから、その配列に格納されているすべてのレコードを挿入するクエリを1つだけ使用できます。

下記のコードを参照すると、パフォーマンスを達成する方法がさらにわかります。ループ内

function teacher_attendance_selector() 
 

 
    { 
 

 
     $data['year']  = $this->input->post('year'); 
 
     $data['timestamp'] =strtotime($this->input->post('timestamp')); 
 
     $query = $this->db->get_where('teacher_attendance' ,array(
 
        'teacher_id'=>$data['teacher_id'], 
 
      'year'=>$data['year'], 
 

 
     )); 
 

 

 

 
     if($query->num_rows() < 1) { 
 
      $teachers = $this->db->get_where('teacher' , array())->result_array(); 
 

 
      $arr_batchinsert = array(); 
 

 
      foreach($teachers as $row) { 
 
       $attn_data['year']  = $data['year']; 
 
       $attn_data['timestamp'] = $data['timestamp']; 
 
       $attn_data['teacher_id'] = $row['teacher_id']; 
 
       
 
       // PREPARE ARRAY FOR BATCH INSERT 
 
       $arr_batchinsert = $attn_data; 
 
      } 
 

 
      // insert here using insert_batch 
 
      $this->db->insert_batch('teacher_attendance', $arr_batchinsert); 
 

 

 
     } 
 
    redirect(base_url().'index.php?admin/manage_teacher_attendance_view/'.$data['timestamp'],'refresh'); 
 
     }

+0

この方法で20個のデータセットを試しましたが、データベースに挿入したり、エラーを出したりしませんでした – sud

+0

@sud – Jazzzzz

関連する問題