Neuigkeiten:

still alive...

Hauptmenü

bedingtes update

Begonnen von maui muc, 05. März 2009, 10:36:36

Vorheriges Thema - Nächstes Thema

maui muc

Hallo Leute,
heute habe ich ein, wie ich meine, echt kniffeliges Problem.
Über ein Formular füttere ich eine Personentabelle mit den ublichen Werten wie Name, eMail usw.. Die Tabelle hat natürlich auch einen Primärschlüssel. Jetzt kann es aber vorkommen, dass sich bei der Eingabe ein Tippfehler einschleicht. Sollte das der Fall sein, möchte ich, dass der User das Formular korrekt ausfüllt und erneut abschickt. Stimmt dann ein gewisser Satz von Daten überein, soll ein UPDATE durchgeführt werden anderenfalls ein INSERT.
Dazu hatte ich folgende Idee:
REPLACE INTO 
students (id,firstname,lastname,email)
VALUES(
(SELECT id
FROM students
WHERE firstname=\"Max\"
AND lastname=\"Mustermann\")
, \"Max\", \"Mustermann\",\"korrigierte eMail\");

 Das funktioniert aber nicht, weil ich im subquery auf die selbe Tabelle verweise. ERROR 1093 (HY000): You can\'t specify target table \'students\' for update in FROM clause
Edit:
REPLACE verhält sich für meine Zwecke ganz praktisch. ist das Feld id leer, wird via auto_increment eine neue id vergeben und ein neuer Datensatz erzeugt. Ist die ID hingegen gegeben werde die Daten überschrieben.
Gibt es vielleicht so etwas wie eine IF Abfrage?
Hat einer von euch einen Tipp wie dieses verzwickte Problem Lösen kann?
Gruß
Stefan

mahe

Da gibts doch die Spalte ID ...
Übergib die doch im Formular mit oder speicher die in einer Session ...
Dann hast immer den richtigen Datensatz /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


maui muc

Genau das möchte ich eben umgehen. Wenn ich die ID übergebe, dann kann ich auch gleich mit INSERT ... ON DUPLICAT KEY ... ; arbeiten.
Gibt es vielleicht eine Kontrollstrucktur in SQL die folgendes leistet?
WENN (query) DANN (update) SONST (insert)
Gruß
Stefan

maui muc

Juhu, ich habs. SQL ist einfach nur super cool.
Ich muss einfach nur einen zweiten INDEX setzen. Der muss dann natülich aus den entsprechenden Feldern bestehen die ggf. ein UPDATE erfahren sollen. Im obigen Beispiel wäre das dann:
UNIQUE (firstname,lastname)

 Hat man nun einen eindeutigen Schlüssel, reich ein:
INSERT INTO ... ON DUPLICAT KEY UPDAET ...;

 Das erspart mir ca. 30 Zeilen PHP Code.  /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />/uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />/uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\" />

all your base are belong to us