Hallo Allerseits
sitze schon seit einiger zeit an einem Script fest welcher den Inhalt von mehreren Datenbanken(über Joins) ausliest und diese in eine txt speichert, das auslesen und speichert klappt aber das Problem liegt in der Performance,
es dauert viel zu Lange bis die txt datei gefüllt, besipw am anfang ist die 1kb groß bleibt 20bis30sec. so und dann ist se 66Kb wächst also sehr laaangsam t und ist auserdem noch ziemlich Ressourcenfressend denn wen der Scrript läuft wird der Pc aufeinmal ganz lahm. Also hab schon recht alles versucht, mich auf Variablen begrenzt die ich auch wirklich brauche doppelte " gegen einfache ' ersetzt, Variablen am Ende auf null setzen. Ich muss dazu hinzufügen es ist eine ganz schöne menge an Daten die bewegt wird. ich glaub so um die 19k DB-Einträgen
Anfangs wollte ich ja Stumpf die ganze DB runterziehen aber das war noch schlimmer als jetzt hat aber noch weniger sinn gemacht war viel zu Langsam und Ressourcenfressender als jetzt.
Den jetzt versuche ich die Daten häppchenweise rauszuziehen. Klappr bischen besser aber auch nur n bissle:
Vieleicht fällt euch was ein was ich besser machen könnte, also ich bin da echt Überfragt.
<?php
$minLimit = 0;
$file = 'test.txt';
if(file_exists($file)){
unlink($file);
}
$fp = fopen('test.txt', 'a+');
$csv_head = array('aid', 'brand','mpnr', 'ean','name', 'desc', 'shop_cat', 'price', 'ppu', 'link', 'image', 'dlv_time', 'dlv_cost', 'pzn');
$csv_file[0] = implode('|', $csv_head);
fputs($fp, $csv_file[0]);
fwrite($fp, "\n");
$i=0;
$select2 = 'SELECT SQL_CALC_FOUND_ROWS
d.html_osc,
d.artikel_id,
b.xxx,
b.aufschlag,
b.sonderlieferzeit,
b.lieferzeit,
a.rec_id as id,
a.shop_artikel_id,
a.matchcode,
a.artnum,
a.kurzname,
a.menge_akt,
a.shop_image,
a.vk5
FROM testcao.artikel a
LEFT JOIN fuchsweb.lieferzeiten b ON b.cao_id = a.rec_id
LEFT JOIN testcao.artikel_to_kat c ON c.artikel_id = a.rec_id
LEFT JOIN fuchsweb.z_artikel_grund d ON d.artikel_id = a.rec_id
WHERE d.html_osc IS NOT NULL
GROUP BY a.rec_id';
$queryLc = mysql_query($select2) or die (mysql_error().__LINE__);
$limit = mysql_num_rows($queryLc);
$select3 = mysql_query('SELECT FOUND_ROWS() AS ende');
$que = mysql_fetch_array($select3);
$ende = $que['ende'];
$repeat = ceil($que[0]/100); // Durch 100 weil 100 Datensätze pro lauf geschrieben werden.
for($c=0; $c<=$repeat;$c++){
#$minLimit = $minLimit+100;
if($minLimit>$ende) continue;
$select = 'SELECT
d.html_osc,
d.artikel_id,
b.xxx,
b.aufschlag,
b.sonderlieferzeit,
b.lieferzeit,
a.rec_id as id,
a.shop_artikel_id,
a.matchcode,
a.artnum,
a.kurzname,
a.menge_akt,
a.shop_image,
a.vk5
FROM testcao.artikel a
LEFT JOIN fuchsweb.lieferzeiten b ON b.cao_id = a.rec_id
LEFT JOIN testcao.artikel_to_kat c ON c.artikel_id = a.rec_id
LEFT JOIN fuchsweb.z_artikel_grund d ON d.artikel_id = a.rec_id
WHERE d.html_osc IS NOT NULL
GROUP BY a.rec_id LIMIT '.$minLimit.',100';
$query = mysql_query($select) or die (mysql_error());
while ($row = mysql_fetch_object($query)){
$artid = $row->id;
$desc = $row->html_osc;
$xxx = $row->xxx;
$aufschlag = $row->aufschlag;
$lief = $row->sonderlieferzeit;
$liefzeit = $row->lieferzeit;
$shop_id = $row->shop_artikel_id;
$kurzname = $row->kurzname;
$name = $row->matchcode;
$artikelNr = $row->artnum;
$mengeAkt = $row->menge_akt;
$image = $row->shop_image;
$preis = $row->vk5;
$i++;
if($mengeAkt > 0 )
{
$liefer = 1;
$day = ' Tag';
}
if($mengeAkt < 1)
{
$liefer = $liefzeit+1;
if ($lief < 1) {
$lief = $lief+1;
}
$day = ' Tage';
}
if($xxx == 'Y')
{
$liefer = $lief+1;
if($lief > 1)
{
$liefer = $liefzeit+1;
$day = ' Tage';
}
}
$selectKat = 'SELECT artk.kat_id, ak.name AS kat1, ak2.name AS kat2, ak3.name AS kat3, ak4.name AS kat4 FROM testcao.artikel_to_kat artk
LEFT JOIN testcao.artikel_kat ak ON ak.id = artk.kat_id
LEFT JOIN testcao.artikel_kat ak2 ON ak2.id = ak.top_id
LEFT JOIN testcao.artikel_kat ak3 ON ak3.id = ak2.top_id
LEFT JOIN testcao.artikel_kat ak4 ON ak4.id = ak3.top_id
WHERE artk.artikel_id = ' . $artid;
$queryKat = mysql_query($selectKat) or die (mysql_error());
$rowKat = mysql_fetch_object($queryKat);
$katId = $rowKat->artikel_id;
$name1 = $rowKat->kat1;
$name2 = $rowKat->kat2;
$name3 = $rowKat->kat3;
$name4 = $rowKat->kat4;
$kat = '';
if($name4)
$kat .= 'Start >'. $name4 ;
else
$kat .= 'Start ';
if($name3)
$kat .= '> '.$name3 ;
if ($name2)
$kat .= '> '.$name2;
if($name1)
$kat .= '> '.$name1;
$deeplink = '...'.$shop_id;
$imaglink = '...'.$image;
$lieferkosten = '...';
$entry = array($artikelNr, ' ', ' ', ' ',$kurzname, $sql->cleanDesc($desc), $kat, $preis, ' ' , $deeplink, $imaglink, $liefer.$day, $lieferkosten, ' ');
$csv_body[$i] = implode('|', $entry);
fwrite($fp, $csv_body[$i]);
fwrite($fp, "\n");
$artid = '';
$desc = '';
$xxx = '';
$aufschlag = '';
$lief = '';
$liefzeit = '';
$shop_id = '';
$kurzname = '';
$name = '';
$artikelNr = '';
$mengeAkt = '';
$image = '';
$preis = '';
$kat = '';
$entry = '';
$name1 = '';
$name2 = '';
$name3 = '';
$name4 = '';
$deeplink = '';
$imaglink = '';
$lieferkosten = '';
$entry = '';
$csv_body = array();
}
$minLimit = $minLimit+100;
mysql_free_result($query);
mysql_free_result($queryKat);
}
fclose($fp);
?>
Alles anzeigen
bin für jeden tipp dankbar