kostenloser Webspace werbefrei: lima-city


Eintragen von Datensätzen beschleunigen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Hallo zusammen,
    ich habe vor, ein Lageplan für ein Spiel zu programmieren und dafür will ich jede einzelne Koordinate in die Datenbank speichern. Ich hatte vor, das über PHP mit folgendem Code zu machen:

    for($x=50; $x<=50; $x++){
    	for($y=1; $y<=25; $y++){
    		$insert = "INSERT INTO lageplan (id, x_koordinate, y_koordinate) VALUES ('NULL', '$x', '$y')";
    		if($ergebnis2 = $mysqli->query($insert)) {
    			// Erfolgreich eingetragen
    		}	
    	}	
    }


    Das funktioniert auch super. Nur ich habe gemerkt, dass es relativ lange dauert und mir gedacht, dass muss doch schneller gehen.

    In meinem Fall sind es jetzt 2500 Einträge, was noch in Ordnung ist. Aber was ist, wenn man mehrere Hunderttausend Einträge automatisiert eintragen will? Wie geht das am besten? Würde mich über Hilfe freuen.

    Liebe Grüße
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Alle Einträge sammeln und am Ende EIN insert machen. VALUES können beliebig viele Datensätze, getrennt durch Komma sein.

    INSERT INTO xyz (id, x, y)
    VALUES
    (1, 34985, 2905), (2, 3489, 390486), ...
  4. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Aber so müsste ich doch alle Werte per Hand in das Insert schreiben oder nicht? Dann wäre es ja nicht mehr automatisiert. Oder komm ich grad nur nicht drauf wie deine Variante auch automatisiert gehen könnte?
  5. Statt dem INSERT in der Schleife sammelst du alle in einem Array
    $daten[] = "('NULL', '$x', '$y')";

    Nach der Schleife verbindest du sie mit einem
    $insert = implode (', ', $daten);

    und hängst $insert nach VALUES an die Abfrage.

    INSERT INTO lageplan (id, x_koordinate, y_koordinate) VALUES $insert

    Beitrag zuletzt geändert: 1.4.2013 21:56:07 von chatter
  6. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Mhhh könntest du mir das wohl in den Code von oben einbauenß Wäre echt nett. Blicke da grad noch nicht so durch.
  7. Weil ich gerade ein paar Minuten Zeit habe:
    $daten = array ();
    for($x=50; $x<=50; $x++){
    	for($y=1; $y<=25; $y++){
                  $daten[] = "('NULL', '$x', '$y')";
    	}	
    }
    
    $daten = implode (', ', $daten);
    
    $insert = "INSERT INTO lageplan (id, x_koordinate, y_koordinate) VALUES ".$daten;
    if($ergebnis2 = $mysqli->query($insert)) {
    // Erfolgreich eingetragen
    }


    Edit: Kleiner Syntaxfehler

    Beitrag zuletzt geändert: 1.4.2013 22:07:38 von chatter
  8. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Danke schön! Funktioniert echt viel viel schneller! Allerdings habe ich das grad mal zum Test mit 300.000 Datensätzen gemacht und dann kam folgender Fehler:

    Warning: Error while sending QUERY packet. PID=9532 in C:\Program Files (x86)\EasyPHP-12.1\www\test\insert.php on line 36


    Weißt jemand zufällig, was das zu sagen hat?

    EDIT:

    Und wenn ich die Zahl halbiere kommen folgende Meldungen:

    Warning: mysqli::query(): MySQL server has gone away in C:\Program Files (x86)\EasyPHP-12.1\www\test\insert.php on line 36
    
    Warning: mysqli::query(): Error reading result set's header in C:\Program Files (x86)\EasyPHP-12.1\www\test\insert.php on line 36


    Beitrag zuletzt geändert: 1.4.2013 23:06:14 von ultimate-bravery
  9. 300.000 wird im wohl zu viel auf einmal sein. Teil es doch ein bisschen auf, oder falls nur lokal, setz die Beschränkungen in der MySQL-config höher.
  10. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Welche Beschränkung wäre das denn genau in der Config?
  11. ultimate-bravery schrieb:
    Welche Beschränkung wäre das denn genau in der Config?
    oder probierst du so (in einem 'cmd'-fenster)
    php -f 'C:\Program Files (x86)\EasyPHP-12.1\www\test\insert.php'

    in dem fall hat php keine beschrenkungen unter unix/linux. wenn unter windows ist das auch so, dann hast du schon gewonnen ;)

    ==== EDIT ====
    die beschränkungen können hauptanteilich 'laufzeitüberschreitung' o. 'maxdataüberschreitung' sein.

    Beitrag zuletzt geändert: 2.4.2013 10:32:11 von czibere
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!