2016-12-19 3 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

без цикла запроса i can not вставьте в таблицу teacher_attendance .. это должно произойти в этот момент – sud

ответ

0

Ваш запрос на ввод занимает огромное время. Следуйте предложенному ниже способу, вы можете хранить все данные в одном массиве, а затем вы можете использовать только один запрос для вставки всех записей, хранящихся в этом массиве.

см. Ниже код, который вы получите больше идей, как достичь производительности.

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