Michael: Update mehrere Datensaetze gleichzeitig

Moin Moin....

Mit dem SQl Statement UPDATE Tabelle set Pos='1' where Mannschafts_id='6' bekomme ich einen Datensatz upgedatet.
Nur möchte ich 18 Mannschaften gleichzeitig updaten mit einem SQL Statement, kann mir mal jemand auf die Sprünge helfen...

Gruss Michael

  1. Hello,

    Mit dem SQl Statement UPDATE Tabelle set Pos='1' where Mannschafts_id='6' bekomme ich einen Datensatz upgedatet.
    Nur möchte ich 18 Mannschaften gleichzeitig updaten mit einem SQL Statement, kann mir mal jemand auf die Sprünge helfen...

    Möchtest Du denn bei allen betroffenen Datensätzen dasselbe Update durchführen?

    Also z.B.:   update preise
                 set rabatt = rabatt * 1.5
                 where rabatt < 20

    Dann würden alle Datensätze, die einen Rabatt kleiner 20 eingetragen haben, geändert werden.

    Wenn Du unterschiedliche Dinge mit den Datensätzen machen willst, wird es kompliziert und man verliert auch schnell die Übersicht, ob das Statement bei jedem Satz wie gewünscht funktioniert hat. Man kann zwar hinterher die Affected Rows abfragen, weiß also, wieviele Sätze es getroffen hat, aber leider nicht welche bzw. welche nicht, die es aber eigentlich treffen sollte.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Moin Tom

      Danke für deine schnelle Antwort.
      Eigentlich dreht es sich darum das ich jeder Mannschaft eine eindeutige ID gegeben habe.
      Ich hab eine Textdatei in der steht die ID und die Punkte.
      verloren = 0
      unentschieden = 1
      gewonnen = 2

      ich hab mir da ein php Script gebastelt welche in Variablen die Werte enthält

      m_id=1
      punkte=1

      eigentlich sollte anhand der m_id die dazugehörigen Punkte der Mannschaft zugefügt werden.

      Einzeln updaten ist ja kein Thema.

      Dafür muss es doch eine Lösung geben ?

      Gruss Michael

      1. Hallo Michael,

        Eigentlich dreht es sich darum das ich jeder Mannschaft eine eindeutige ID gegeben habe.

        vorhin ging es noch um Positionen, die Du aktualisieren wolltest, jetzt auf einmal um Punkte. Um was geht es nun? Bitte poste exakt Deine Tabellen und exakt die Änderungen, die Du durchführen möchtest. Bitte poste exakt den Grund, warum Du diese Änderungen durchführen möchtest.

        Ich hab eine Textdatei in der steht die ID und die Punkte.
        verloren = 0
        unentschieden = 1
        gewonnen = 2

        ich hab mir da ein php Script gebastelt welche in Variablen die Werte enthält

        PHP hat mit SQL nichts zu tun, außer dass Du mit PHP wie mit vielen anderen Programmiersprachen SQL-Statements zusammenbauen und diese an Dein Datenbankmanagementsystem weiterreichen kannst.

        Einzeln updaten ist ja kein Thema.
        Dafür muss es doch eine Lösung geben ?

        Nein, nicht unbedingt, aber vielleicht. Es gibt z.B. den IN-Operator. Du hast noch nicht in Ansätzen erläutert, was Du vorhast. Wie soll man Dir da helfen können?

        Ganz wichtig: Welches Datenbankmanagementsystem (MySQL, MS SQL-Server, Oracle, DB2, PostgreSQL, ...) verwendest Du? Bitte die Versionsangabe nicht vergessen.

        Freundliche Grüße

        Vinzenz

      2. Hello,

        Dafür muss es doch eine Lösung geben ?

        Eine recht unschöne aber funktionierende Möglichkeit ist diese

        update rangliste set punkte = if(id=1,11,if (id=2,22,if(id=13,12,punkte)))

        Durch gestaffelte IF() kann man ein Multiupdate mit unterschiedlichen Zuweisungen pro Datensatz erreichen.

        http://dev.mysql.com/doc/refman/4.0/de/control-flow-functions.html

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. Hallo Tom

          Schönen Dank, das war des Rätsels Lösung.

          Gruss Michael

          1. Hello,

            Schönen Dank, das war des Rätsels Lösung.

            Aber nur als Anregung.
            Das sollte man noch genauer auf die Perfomance untersuchen.

            Eventuell ist ein zusätzliches

            where id in (id1, id2, id3, ..., idn)

            für die Performance vorteilhaft, da das Where-Statement zuerst ausgewertet wird.
            Ich weiß aber nicht, wie intelligent z.B. MySQL das Statement abwickelt, wenn es sich um den Primary-Key handelt im in().

            Zusätzliche Sicherheit gibt es aber auf jeden Fall.

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau