maui muc 0 Posted March 5, 2009 Share Posted March 5, 2009 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 Quote Link to post Share on other sites
mahe 0 Posted March 5, 2009 Share Posted March 5, 2009 Da gibts doch die Spalte ID ... Übergib die doch im Formular mit oder speicher die in einer Session ... Dann hast immer den richtigen Datensatz Quote Link to post Share on other sites
maui muc 0 Posted March 5, 2009 Author Share Posted March 5, 2009 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 Quote Link to post Share on other sites
maui muc 0 Posted March 6, 2009 Author Share Posted March 6, 2009 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. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.