INSERT-Syntax mit WHERE-Klausel?

DeluXe

Funkjoker
Hi zusammen,

also ich habe gerade das Problem, dass, bevor etwas in die Datenbank geschrieben wird, aus einer zweiten Tabelle noch ein Abgleich zweier Werte vorgenommen werden soll.

also kurz um:
INSERT INTO tabelle1 (...) VALUES (...) WHERE tabelle2.id=$id AND tabelle2.on=1

Den Query habe ich jetzt schnell getippt, im Code war der natürlich "richtig", nur funktioniert hat es eben nicht.
Den hier reinzukopieren möchte ich euch nicht antuen, der ist sehr lang und für aussenstehend sicher auch sehr verwirrend. ;)

Kann mir jemand erklären wie der Syntax der WHERE-Klausel lauten muss? Wenn es denn überhaupt mit WHERE gemacht wird. :confused:

Im Manual von mysql.com habe ich leider auch nichts hilfreiches in Bezug auf INSERT finden können.


Vielen Dank im vorraus. :)

byez
 
Kurz und einfach

Insert und where gehen so nicht zusammen - warum auch ?

du kannst aber aus einer tabelle was auslesen um die daten in eine andre tabelle einzufügen

inset into tabelle(feld1,feld2) select from tabelle2 feld4,feld5 where feld8=....

meintest du sowas?
 
Hi,

Dacht ich mir schon, dass das nicht geht.

Bei deinem Beispiel kann man aber nur die Daten einfügen, die er aus der anderen Tabelle ausließt, oder?

Weil ich nur Abfragen möchte ob das Eintragen überhaupt erlaubt ist, die Daten, die ich letztendlich eintrage, übergebe ich per Post.


byez
 
die Frage die sich mir dann stellt:
woran erkennst du das ein eintragen erlaubt ist?

nach deiner query zu urteilen ergibt sich die erlaubnis aus einer anderen tabelle
wenn dem so ist - das geht nicht

das muss dan so ablaufen:
select abfrage auf die Tabelle2 und dann mit der programmiersprache (z.b. PHP) eine if Abfrage
in der dein insert ist
 
melmager hat gesagt.:
select abfrage auf die Tabelle2 und dann mit der programmiersprache (z.b. PHP) eine if Abfrage
in der dein insert ist
Hi, er braucht dafür nicht unbedingt PHP oder sonst eine Programmierprache. Schließlich gibt es bei SQL ja auch eine IF - ELSE Anweisung.

@sagg
Kannst du bitte etwas genauer beschreiben, wie der zusammenhang zwischen Tabelle1 und Tabelle2 steht. ich hab zwar eine Vermutung, aber ich weiß nicht ob es das ist was du willst
 
hi,

hatte in dem ganzen Stress ganz vergessen euch zu antworten.

Also mal ganz einfach erklärt, es handelt sich im Prinzip um eine Art Forum, deshalb erkläre ich jetzt nicht mein ganzes System, stellt euch einfach vor es handelt sich um ein Forum. :)

Jeder kennt die Funktion "Thread schließen", um somit das Posten von weiteren Beiträgen zu unterbinden.
Aber da es bekannter Weise ja immer und überall ein paar kleine Nervensägen gibt, die meinen das sie trotz dessen noch etwas hinzuzufügen hätten, wäre es ja möglich, das solche sich anhand einer selbst gebastelten Form, in welcher sie die ID des Threads selber eingeben können, eine solche Funktion umgehen.

Ich möchte einfach vor dem Insert nochmals abfragen ob es sich um einen geschlossenenen (thread.on=0) oder offenen (thread.on=1) Thread handelt.
Das wöllte ich dann aber nicht unbedingt in einer extra Abfrage durchführen, sondern möglichst mit dem Insert verbinden.

Das mit IF klingt ganz interessant , hab gerade mal das Inhaltsverzeichnis von mysql.com danach überflogen, konnte aber nichts finden, auch bei der Suche kamen mehr oder weniger nur unbrauchbare Ergebnisse. :(

Danke nochmals :)


byez
 
Auch das läßt ich mit einem Insert Statement erreichen:

INSERT INTO ... (....)
SELECT thread.id, 'Hallo das ist mine Antwort' [,Alle Felder die noch eingefügt werden sollen]
FROM thread Where thread.on = 1
AND thread.id = [die id des Threads]
Nur wenn der Thread noch offen ist (also thread.on = 1) gibt das Select einen record zurück, der dann eingefügt wird. Andernfalls bleibt der Insert wirkungslos
 
Danke dir, ich werde es höchstwahrscheinlich erst morgen ausprobieren können, dann gebe ich sofort Bescheid ob es geklappt hat oder nicht. :)

byez

edit: Ich sehe gerade, dass das ja im Prinzip das selbe wie in der ersten Antwort war, na mal sehen ob das so klappt wie ich mir das gerade vorstelle.
 
Zuletzt bearbeitet:
Wenn Du das abfangen willst, dann würde ich das Pferd anders herum aufzäumen.
Ich würde in dem Script, in dem die Einträge getätigt werden, zuerst ein select absetzen, ob ein Eintrag getätigt werden darf oder nicht. Und nur wenn das erlaubt ist, wird ein Eintrag eingefügt. Dann können die "Nervensägen" soviele Daten an das Script senden wie sie wollen, es sollte trotzdem kein Eintrag getätigt werden!

redlama
 
Zurück