MatMagic
Erfahrenes Mitglied
Nachdem ich nochmal länger darüber nachgedacht habe (war wirklich nicht offensichtlich) - ist es wirklich gar nicht nötig diese komplexe Suche durchzuführen. Es reicht tatsächlich aus, die Werte einfach nach dem leeren der Tabelle neu einzutragen! (thnxs @Dr.Dau)
Ich habe es jetzt so gelöst:
Und das funktioniert auch bestens.....aber leider nur mit ca. 40% der Daten. Es werden ca. 22000 Einträge vorgenommen (in ca. 5 Sekunden!!), es sind aber 50000 (derzeit können auch mal 60000 sein).
Es kommt keine Fehlermeldung, die Seite wird einfach als "Fertig geladen" gekennzeichnet und ab ca. 22000 wird nichts mehr bearbeitet.
Ich gehe jetzt mal davon aus das es sich um einen Timeout handelt o.ä. und ich die Eintragungen aufteilen muss.
Das könnte ich dann ja sicher mit fopen() machen (Thnxs @Gumbo) allerdings....bekomme ich es nicht hin die Datei bis zu einer bestimmten Zeile (meinetwegen in 20000er Schritten) einzulesen - und dann ab der darauffolgenden Zeile weitereinzulesen nachdem ich per PHP_Self o.ä. die Seite erneut aufrufe.
Würdet ihr mir da bitte mit einem Code-Schnipsel (für Dau`s) auf die Sprünge helfen.....
@Matthias Auch dir thnxs.....ich hoffe ich muss da nix an der DB ändern (last Resort) weil ich selbst das nicht darf.....also ändern lassen müsste (dann schlägt mich sicher der Admin - falls es einfacher gehen würde)
Ich habe es jetzt so gelöst:
Code:
<?php
// Datenbankverbindung aufbauen
include '../logindb.php';
$connectionid = mysql_connect($l1,$l2,$l3);
if (!mysql_select_db ($l4, $connectionid))
{
die ("Ooops! Keine Verbindung zur Datenbank möglich, versuchen Sie es später erneut.");
}
//Tabelle leeren
mysql_query ('TRUNCATE TABLE `force_entry`');
$datei = "quelle.txt";
$lines = file($datei);
$zeilen = count($lines);
$count = 0;
while ($count < $zeilen)
{
$line = $lines[$count];
$zeile = explode('%|', trim($line));
$a[$count] = $zeile[0];
$b[$count] = $zeile[1];
$ab[$count] = $zeile[0]."_".$zeile[1];
$feld[$count] = $zeile[2];
$herzog[$count] = $zeile[3];
$punkte[$count] = $zeile[4];
$sql = "INSERT INTO ".
"force_entry ".
"(ab,".
" a,".
" b,".
" feld,".
" herzog,".
" punkte)".
" VALUES ".
"('$ab[$count]',".
" '$a[$count]',".
" '$b[$count]',".
" '$feld[$count]',".
" '$herzog[$count]',".
" '$punkte[$count]')";
// Daten eintragen
mysql_query ($sql);
echo "Eintrag: ".$count.", >".mysql_error();
$count++;
}
Und das funktioniert auch bestens.....aber leider nur mit ca. 40% der Daten. Es werden ca. 22000 Einträge vorgenommen (in ca. 5 Sekunden!!), es sind aber 50000 (derzeit können auch mal 60000 sein).
Es kommt keine Fehlermeldung, die Seite wird einfach als "Fertig geladen" gekennzeichnet und ab ca. 22000 wird nichts mehr bearbeitet.
letztes Echo (und auch DB Eintrag habe ich nachgeschaut)Eintrag: 21955, >Eintrag: 21956, >Eintrag: 21957, >Eintrag: 21958, >Eintrag: 21959, >Eintrag: 21960, >Eintrag: 21961, >Eintrag: 21962, >Eintrag: 21963, >Eintrag: 21964, >
Ich gehe jetzt mal davon aus das es sich um einen Timeout handelt o.ä. und ich die Eintragungen aufteilen muss.
Das könnte ich dann ja sicher mit fopen() machen (Thnxs @Gumbo) allerdings....bekomme ich es nicht hin die Datei bis zu einer bestimmten Zeile (meinetwegen in 20000er Schritten) einzulesen - und dann ab der darauffolgenden Zeile weitereinzulesen nachdem ich per PHP_Self o.ä. die Seite erneut aufrufe.
Würdet ihr mir da bitte mit einem Code-Schnipsel (für Dau`s) auf die Sprünge helfen.....
@Matthias Auch dir thnxs.....ich hoffe ich muss da nix an der DB ändern (last Resort) weil ich selbst das nicht darf.....also ändern lassen müsste (dann schlägt mich sicher der Admin - falls es einfacher gehen würde)
Zuletzt bearbeitet: