KOmplex: In einer Tabelle X Änderungen durchführen

Hallo, hallo.

Ich möchte folgendes mit einem Query lösen.

Wir haben ein Post-Request mit den ausgefüllten Input Feldern: 0,1,3,4,6
Und den unausgefüllten - leeren Feldern: 2,5,7
In der Datenbank sind Felder 0,1,3,5,7 schon vorhanden, 4 und 6 noch nicht.

Es soll nun folgendes passieren:
0,1,3 sind vorhanden und auch ausgefüllt worden -> UPDATE
2 ist leer und war auch noch nicht vorhanden -> nichts
5,7 sind vorhanden aber unausgefüllt -> DELETE
4,6 sind ausgefüllt aber noch nicht vorhanden -> INSERT

Klingt kompliziert - und wie ist das nun zu lösen?
Wie kann ich also updaten, einfügen, löschen mit einem großen Query?

Die Tabelle hat folgende Spalten:

Userid, Inputfeldid, Information

Vorhandene Datensätze:
1, 0, information1
1, 1, information2
1, 3, information3
1, 5, information4
1, 7, information5

Am Ende sollte es also so aussehen:
1, 0, neueinformation1
1, 1, neueinformation2
1, 3, neueinformation3
1, 4, GANZneueinformation1
1, 6, GANZneueinformation2

Ich kenne maximal INSERT ..ON DUPLICATE KEY UPDATE. Aber ich denke soweit komme ich damit nicht.
Was sagen die Experten?

Gruß,

KOmplex

  1. Hi,

    Wie kann ich also updaten, einfügen, löschen mit einem großen Query?

    weiß nicht. Ich hätte aber eine Lösung mit zwei Queries anzubieten, falls Du nicht selbst drauf kommst.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi.

      weiß nicht. Ich hätte aber eine Lösung mit zwei Queries anzubieten, falls Du nicht selbst drauf kommst.

      Hm.

      Also einfügen und updaten geht mit dem INSERT INTO.. ON DUPLICATE KEY UPDATE
      wenn ich aber löschen will müsste ich ja sowas schreiben: "LÖSCHE X,Y,Z WO DER POST REQUEST 0 WAR ABER VORHER NICHT UND NOCH IN DER DATENBANK STEHT"

      Dazu fürde mir spontan ja sowas einfallen aber das wären dann wieder mehrere Queries:

      $x;  
      foreacht($_POST as $info){  
      if($info==='')  
        query("DELETE IF EXISTS ".$x." FROM table");  
        ++$x;  
      }  
      
      

      hrmpf...

      1. Hi,

        Also einfügen und updaten geht mit dem INSERT INTO.. ON DUPLICATE KEY UPDATE

        ja, und Einfügen geht mit INSERT INTO.

        wenn ich aber löschen will müsste ich ja sowas schreiben: "LÖSCHE X,Y,Z WO DER POST REQUEST 0 WAR ABER VORHER NICHT UND NOCH IN DER DATENBANK STEHT"

        Nö. Wenn Du Datensätze löschen willst, musst Du was schreiben?

        Dazu fürde mir spontan ja sowas einfallen aber das wären dann wieder mehrere Queries:

        Jupp, zwei reichen aber.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi.

          Jupp, zwei reichen aber.

          Also ich komme nicht drauf. Hilf mir bitte.

          Gruß.

          1. Hi,

            »» Jupp, zwei reichen aber.
            Also ich komme nicht drauf. Hilf mir bitte.

            erstens: Alles löschen.
            Zweitens: Alles Benötigte einfügen.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. Moin Moin!

              erstens: Alles löschen.

              ... und fleißig die Daumen drücken, dass dabei keine Trigger und keine Foreign Key Constraints zuschlagen.

              Zweitens: Alles Benötigte einfügen.

              Alexander

              --
              Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
              1. echo $begrüßung;

                » erstens: Alles löschen.
                ... und fleißig die Daumen drücken, dass dabei keine Trigger und keine Foreign Key Constraints zuschlagen.

                Ich denke, wer Trigger setzen kann, braucht so eine Frage nicht zu stellen. Mit anderen Worten: Es ist unwahrscheinlich, dass Trigger hier im Einsatz sind. "Echte" FKs sicher auch nicht. Trigger und FKs sind ja nicht einfach so vorhanden (was man aus deiner Antwort herauslesen könnte), sondern müssen gezielt vom Verwender gesetzt werden.

                echo "$verabschiedung $name";

                1. Hi!

                  » » erstens: Alles löschen.
                  » ... und fleißig die Daumen drücken, dass dabei keine Trigger und keine Foreign Key Constraints zuschlagen.

                  Ich denke, wer Trigger setzen kann, braucht so eine Frage nicht zu stellen.

                  Dann gehst Du davon aus, dass der Nutzer einer Datenbank auch dessen Ersteller ist - davon würde ich nicht immer ausgehen.

                  off:PP

                  --
                  "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
                  1. Hello,

                    » » erstens: Alles löschen.
                    » ... und fleißig die Daumen drücken, dass dabei keine Trigger und keine Foreign Key Constraints zuschlagen.

                    Ich denke, wer Trigger setzen kann, braucht so eine Frage nicht zu stellen.

                    Dann gehst Du davon aus, dass der Nutzer einer Datenbank auch dessen Ersteller ist - davon würde ich nicht immer ausgehen.

                    Ich hätte erst zuende lesen sollen. Siehe https://forum.selfhtml.org/?t=187526&m=1246586
                    Ich bin da Deiner Meinung.

                    Liebe Grüße aus dem schönen Oberharz

                    Tom vom Berg

                    --
                    Nur selber lernen macht schlau
                    http://bergpost.annerschbarrich.de
                2. Hello,

                  » erstens: Alles löschen.
                  ... und fleißig die Daumen drücken, dass dabei keine Trigger und keine Foreign Key Constraints zuschlagen.

                  Ich denke, wer Trigger setzen kann, braucht so eine Frage nicht zu stellen. Mit anderen Worten: Es ist unwahrscheinlich, dass Trigger hier im Einsatz sind. "Echte" FKs sicher auch nicht. Trigger und FKs sind ja nicht einfach so vorhanden (was man aus deiner Antwort herauslesen könnte), sondern müssen gezielt vom Verwender gesetzt werden.

                  Es soll auch schon mal vorgekommen sein, dass ein Verwender ein Query erstellen muss für eine Datenbank, die er z.B. mit dem System bekommen hat. Nachdem es immer mehr gute Shopsysteme u.ä. gibt, ist das sogar immer wahrscheinlicher, dass man da dann auch mal über Trigger stolpert.

                  Ich habe mir neulich nochmal einen abgebrochen, nun mal endlich den PostfixAdmin mit den anderen gewünschten Bausteinen gemeinsam für den Postfix zum Laufen zu bringen... Das Ding verwendet inzwischen InnoDB und echte Foreign Keys. Und in der erweiterten Beschreibung war sogar von Triggern die Rede.

                  Liebe Grüße aus dem schönen Oberharz

                  Tom vom Berg

                  --
                  Nur selber lernen macht schlau
                  http://bergpost.annerschbarrich.de