mysql sonuçları-to-csv yazma fonksiyonu yürütme üretimi bitirmek değil

2 Cevap php

Ben (baskı beslenirler virgülle sınırlandırılmış bir dize üretir, sonra veritabanı okur benim denetleyicisi (Im CodeIgniter'ı kullanarak)) bu işlevi var yani kullanıcı dosyayı açmak / kaydedebilirsiniz.

Geliştirme, yaklaşık 2000 + kayıtların ihracat yaklaşık 20-30 saniye sürer. Sorun üretimi, istek bitmezse / boş bir sayfa (hayır kaydetmek / açık iletişim kutusu tarayıcı tarafından görüntülenen) gider, bir.

Ben diğer bazı php.ini ayarları çimdik gerekir mi? Şu anda üretim memory_limit üzerinde 256MB altındadır, max_execution_time 300 yer almaktadır. (Geliştirme max_execution_time Açık 600'de olduğu).

Bu yardımcı olur, burada kodları (soyunmuş sürümler) şunlardır:

Model (kidsprofile_model):

function get_masterlist() {
    $this->db->select(kid_id,name, date_created, date_modified, birthdate)
    ->from('kids_profile');
}

CSV için yukarıdaki işlem kontrol fonksiyonu:

function export_to_csv() {
        $kids = $kid_model->get_master_list();
     $out = "";
     $out .= "Date Created,Date Modified,Kid Id,Kid Name,Age".
             "Father Name,Mother Name,Guardian 1 Name,Guardian 2 Name,\n";
 foreach ($kids->result() as $kid) {
  $date_created = ($kid->date_created)?date('F j Y',$kid->kid_date_created):'';
  $date_modified = ($kid->date_modified)?date('F j Y',$kid->date_modified):'';
  $out .= $date_created.",".$date_modified.",".$kid->kid_name.",".getAge($kid->birthdate).","
  .get_detail_of_parent($kid->kid_id,'Mother','lname').",".get_detail_of_parent($kid->kid_id,'Mother','fname').",".get_detail_of_parent($kid->kid_id,'Mother','contact_no').","
     .get_detail_of_parent($kid->kid_id,'Father','lname').",".get_detail_of_parent($kid->kid_id,'Father','fname').",".get_detail_of_parent($kid->kid_id,'Father','contact_no').","
     .get_detail_of_guardian($kid->kid_id,0,'fname').",".get_detail_of_guardian($kid->kid_id,0,'lname').",".get_detail_of_guardian($kid->kid_id,0,'contact_no').","
     .get_detail_of_guardian($kid->kid_id,1,'fname').",".get_detail_of_guardian($kid->kid_id,1,'lname').",".get_detail_of_guardian($kid->kid_id,1,'contact_no').",";
  $out .="\n";
 }

 header("Content-type: text/x-csv");
 header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
 header("Content-Disposition: attachment; filename=master_list.csv");
 header("Pragma: no-cache");
 header("Content-Length: " . strlen($out));
 header("Expires: 0");

 print($out);
}

Get_detail_of_guardian () Eğer döngü bir çocuk için koruyucu bilgi alır, başka bir tablo sorgular için içinde yukarıya bakın. (Yukarıdaki çocuklar için sorgusu ile birlikte katılmak sol neden diyebilirsiniz olanlar için, ben denedim ve ben 4 sol (2 anne, 2 veliler) 1 çocuk için katıldı gerekiyor çünkü çok yavaştır.)

2 Cevap

Eğer get_detail_of_parent ve get_detail_of_guardian yapmak aramaların çokluğu bellek tükeniyor inanmak için bana yol açar. Eğer masalarda doğru indeksleme yoksa veya çok büyük veri kümelerinde ve yeterli boş hafıza ile ilgili sürece büyük ölçüde sorgu hızını azaltarak edilmemelidir 4. SOL KATILDI.

Tek bir sorgu içine fname, lname ve contact_no almak için çağrı yoğunlaşmasına değil misiniz? Bu size üzerinde yineleme her çocuk sonuç için 12 sorgular yol açan, bu her biri için veritabanını yeniden sorgulama olabilir görünür.

Daha az veri alır veya daha az işlemek vardır böylece sorgu değiştirebilir miyim? Eğer bu çalışırsa, o zaman onun bir zamanaşımı veya bellek sorunu biliyorum