Newbie braucht Hilfe bei Schleife

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Newbie braucht Hilfe bei Schleife

    Hallo,

    ich benutze folgende Schleife, um Datensätze aus MySQL auszulesen und zu bearbeiten:

    Code:
    $query = "SELECT * FROM tabelle1";
    $result = mysql_query ($query);
    while ($line = mysql_fetch_array($result)) {
    	extract($line);
    	$query2 = "SELECT * FROM tabelle2";
    	$result2 = mysql_query ($query2);
    	while ($line2 = mysql_fetch_array($result2)) {
          		extract($line2);
          		if ($feld1_aus_tabelle2 == $feld1_aus_tabelle1) {
    			$returncode = machwas($feld2_aus_tabelle1,$feld3_aus_tabelle1,$feld2_aus_tabelle2,$feld3_aus_tabelle2);
           		}
        	}
    }
    Mein Problem ist, daß ich etwa 5000 Datensätze so bearbeiten muß, das Script aber anscheinend einen Timeout hat, da es nicht bis zum Ende "durcharbeitet".

    Kann mir jemand bitte erklären oder noch besser zeigen, wie ich in diese Abfrage eine Schleife einbauen kann, so daß z.B. immer 100 Datensätze bearbeitet werden und dann die nächsten 100 u.s.w.?

    Vielen Dank!

  • #2
    Mach es doch einfacher:
    PHP-Code:
    $result mysql_query("SELECT * FROM tabelle1, tabelle2 WHERE tabelle1.Feldname = tabelle2.Feldname");
    while(
    $row mysql_fetch_array($result))
    {
        
    // Mache was 

    So bekommst du dann nur die betroffenen Datensätze heraus die miteinander übereinstimmen.
    mfg
    Günni


    Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
    Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
    Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
    City-Tiger - Online durch die Straßen tigern...

    Kommentar


    • #3
      Hallo Günni,

      danke erstmal für Deinen Tip!

      Nun fehlt mir nur noch die Logik, wie ich Timeouts verhindern kann, also z.B. zuerst feststellen, wieviele Datensätze betroffen sind und dann diese irgendwie mit LIMIT dann jeweils 100 bearbeiten, ein kleines Päuschen machen und dann die nächsten 100 ... gibt es da für mich auch noch einen Tip?

      Danke sehr!

      Kommentar


      • #4
        Lass einen Counter in der Whileschleife mitlaufen und bei 100 machen dann eine kleine Pause und setze den Counter wieder auf 0. Danach wieder was selbe spiel, bis alle Tupel durch sind.
        mfg
        Günni


        Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
        Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
        Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
        City-Tiger - Online durch die Straßen tigern...

        Kommentar


        • #5
          für die pause wär sleep(10); ganz geeignet denk ich ma..

          Kommentar


          • #6
            @Trashar
            Das war auch dies an was ich gedacht habe
            mfg
            Günni


            Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
            Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
            Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
            City-Tiger - Online durch die Straßen tigern...

            Kommentar


            • #7
              Original geschrieben von Günni
              @Trashar
              Das war auch dies an was ich gedacht habe
              OffTopic:
              wir ergänzen uns ganz gut!

              Kommentar


              • #8
                Ihr ergänzt Euch ganz prima, wäre nur jetzt noch die Krönung, wenn mir als Newbie einer von Euch einen Beispiel-Code geben könnte

                Kommentar


                • #9
                  PHP-Code:
                  $result mysql_query("SELECT * FROM tabelle1, tabelle2 WHERE tabelle1.Feldname = tabelle2.Feldname");
                  $i 1;
                  while(
                  $row mysql_fetch_array($result))
                  {
                      
                  // Mache was 

                  if($i == 100) { 
                  sleep(10);
                  $i=1;
                  }
                  $i++;

                  Kommentar


                  • #10
                    http://www.php.net/manual/de/function.sleep.php
                    mfg
                    Günni


                    Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
                    Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
                    Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
                    City-Tiger - Online durch die Straßen tigern...

                    Kommentar


                    • #11
                      Danke sehr!

                      Macht es nicht mehr Sinn, die MySQL-Abfrage in 100er Schritten (irgendwie mit LIMIT) durchzuführen, um dem Timeout entgegenzuwirken?

                      Kommentar


                      • #12
                        Da gibt es mir sicherheit auch eine möglichkeit...
                        mfg
                        Günni


                        Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
                        Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
                        Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
                        City-Tiger - Online durch die Straßen tigern...

                        Kommentar

                        Lädt...
                        X