MySQL Insert Befehl mit Fremdschlüssel

Brus-xy

Mitglied
Hallo Leute,
ich habe, für euch sicherlich sehr trivial, für mich aber doch ein etwas kompliziertes Problem.

Und zwar benötige ich einen Insert Befehl, der in eine Datenbank in die Haupttabelle mit den Spalten Wert1 und tag_id Werte einfügt.

Es gibt eine weitere Tabelle (Tabellenname: tage) in der die Spalten tag_id, tag aufgelistet sind. Mit den Inhalten:
  • ID Tag
  • 0 Montag
  • 1 Dienstag
  • 2 Mittwoch

usw.

Jetzt möchte ich über den Insert Befehl nur einen Wert und einen Wochentag (also ausgeschrieben z.B. 999, Montag) in die Haupttabelle eingeben, eingetragen werden soll aber der Wert und die zugehörige ID (die über die Tabelle tage ermittelt werden muss). Also 999, 0

Die beiden Tabellen sind InnoDB Tabellen und tag_id in der Haupttabelle ist als Fremdschlüssel der tag_id in der Tabelle tage verknüpft.
 
Wenn mich nicht alles täuscht dann so:

SQL:
INSERT INTO
    haupt_tabelle (Wert1, tag_id)
    VALUES(999, (SELECT tag_id FROM tage WHERE tag = 'Montag'))
 
So wie tombe das beschreibt sollte es klappen.

Aber zwei Dinge sollte man dabei noch beachten:
1. Der select darf nur genau 1 record zurückliefern
2. Entweder in der Applikation sicherstellen, dass nur Werte eingegeben werden können die es in der Tabelle tage gibt, oder aber das Select in ein IF((SELECT...) IS NULL,-1, tag_id) oder COALESCE verpacken um NULL Werte zu verhindern. Wahrscheinlich ist tag_id eh NOT NULL, falls also bei einer Fehleingabe NULL daherkommt würde dir die Query um die Ohren fliegen.
 
Zuletzt bearbeitet:
Da hat BaseBallBatBoy recht!

Damit der User nichts falsches eingeben kann, würde ich die Wochentage in eine Auswahlliste eintragen.

Entweder aus der Tabelle "tage" auslesen oder weil sich da ja nichts ändern kann fest im HTML Code eingeben. Der VALUE-Eigenschaft kann dann gleich die Zahl zugewiesen werden und es wird so gespeichert wie es sein soll.
 
Danke euch beiden für die schnelle Hilfe, das mit dem Abfangen von ungültigen Einträgen werde ich berücksichtigen!! :)
 
@timestamp: Ich habe nicht geschrieben das die so gemachten Eingaben nicht validiert werden müssen!
Ich finde es nur unnötig eine Tabelle anzulegen in der Montag, Dienstag, ..., Sonntag zusammen mit einem Index steht und das dann per Abfrage auszulesen und in eine Auswahlliste einzutragen.

Die wenigen Daten könnte man einfach so:

HTML:
<select name="tage" size="1">
    <option value="-1" selected="selected">Wochentag ausw&auml;hlen</option>
    <option value="0">Montag</option>
    <option value="1">Dienstag</option>
    <option value="2">Mittwoch</option>
    <option value="3">Donnerstag</option>
    <option value="4">Freitag</option>
    <option value="5">Samstag</option>
    <option value="6">Sonntag</option>
</select>

fest in die Seite eintragen. Hier kann sich nichts ändern da es nunmal nur Montag bis Sonntag gibt!
 

Neue Beiträge

Zurück