Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] mysql update mit/ohne schleife

Einklappen

Neue Werbung 2019

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

  • [Erledigt] mysql update mit/ohne schleife

    Ich picke mir 100 Zeilen aus einer Tabelle, die sich während der verarbeitung nicht verändert, verarbeite diese in einer while-schleife, und markiere dann jede Zeile als erledigt:

    PHP-Code:
    $sql "SELECT 
                   id,col2 
              FROM 
                   tbl 
              WHERE 
                   col1 = 1 
              ORDER BY 
                   id 
               LIMIT 
                   100"
    ;
    $erg mysql_query($sql);
    while (
    $row mysql_fetch_assoc($erg)) {
      
    // mach was mit $row['col2'];

      // Zeile als erledigt markieren
      
    $upd "UPDATE tbl SET col1 = 0 WHERE id = " $row['id'];
      
    mysql_query($upd);

    Ich möchte den Scriptablauf beschleunigen und vermute, dass das 100-malige Updaten in der Schleife nicht grade sehr performant ist. Gibt es einen SQL-Ansatz, mit dem ich die 100 Zeilen auf einen Rutsch updaten kann. Wie müsste das aussehen?
    PHP-Code:
    if ($var != 0) {
      
    $var 0;



  • #2
    Nein da gibt es soweit mir bekantn keinen wirklichen Ansatz

    Wenn du ein SQL backup mit phpMyAdmin wiederherstellst führt er ja auch jeden einzelnen Query für jede Zeile einzeln aus. Das machst du in der schliefe ja auch, du könntest höchstens einen kleinen Sleep (sleep(1) davorsetzen damit SQL sozusagen zeit zum entspannen hat aber ich glaube das ist nicht nötig weil PHP sowieso wartet bis die Abfrage erledigt ist.

    SQL kann eben nur einen Datzensatz gleichzeitig bearbeiten. Wichtig ist halt das du nach dem SELECT befehl das Rsultat mit mysql_free_result(); sauber machst

    in deinem Fall: mysql_free_result($erg);

    damit der SQL die Abfrage eben wieder sauber macht weil sonst kommt die Datenbank schnell an ihre Speicherlimits wenn es immer um 100 Datenbanken gleichzeitig geht

    Kommentar


    • #3
      Na klar. Wieso machst Du nicht ein UPDATE der Art
      Code:
      UPDATE WHERE id IN (01, 05, 47 , 11)
      . Das geht mit Sicherheit schneller. Und zu sleep als Performancesteigerung sag ich jetzt mal nichts..
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Die Bedingung im SELECT haust du einfach ins UPDATE.
        "Mein Name ist Lohse, ich kaufe hier ein."

        Kommentar


        • #5
          Naja, das wird vermutlich deswegen nicht gehen:
          // mach was mit $row['col2'];
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Zitat von Chriz Beitrag anzeigen
            Die Bedingung im SELECT haust du einfach ins UPDATE.
            Vornkoppklatsch

            ... irgendwann werde ich die datensatzbezogene Denkweise verloren haben ...

            Das sollte funktionieren. Merci fielmann.
            PHP-Code:
            if ($var != 0) {
              
            $var 0;

            Kommentar


            • #7
              Und die gropß angekündigten Aktionen
              // mach was mit $row['col2'];
              erfolgen dann im SQL oder wie?
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar

              Lädt...
              X