PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : m:n Relation in mysql


shyboyking
03.08.2004, 20:38
Hallo,

eine m:n-Relation habe ich folgendermaßen gelöst:


tabellekabel
id kabel
1 Flachkabel
2 Rundkabel



zwischentabelle
idkabel idfarbe
1 1
1 2


tabellefarbe
id farbe
1 rot
2 grün
3 blau


Hier wären also dem Flachkabel die Farben rot und grün zugeordnet.


Jetzt zum Problem:

Im Administrationsbereich möchte ich jetzt dem Rundkabel die Farben grün und blau zuordnen, so dass
die zwischentabelle dann so aussieht:

zwischentabelle
idkabel idfarbe
1 1
1 2
2 2
2 3

Dazu wähle ich aus einem Select-Feld das Rundkabel aus, und wähle anhand von Checkboxen die dazugehörigen Farben grün und blau aus.

Wie muß jetzt der mysql-Befehl lauten, um diese Zwischentabelle wie angegeben zu befüllen?
Da ich die Farben grün und blau eingetragen habe,
mußte der Befehl 2 Datenpaare in die Zwischentabelle eintragen. Hätte ich jetzt anhand der Checkboxen alle 3 Farben für das Rundkabel gewählt,
hätte der Befehl 3 Datenpaare in die Zwischentabelle eintragen müssen.
Für eine Lösung wäre ich dankbar.

Grüsse shyboyking


~Paladin~
03.08.2004, 21:44
Ich weiß zwar nicht mit welcher Sprache Du an MySQL gehst aber im Prinzip müsste das so mit fast jeder gehen...

SQLStatement für die Elterntabelle um den Key für das Rundkabel auszulesen:



SELECT id FROM tabellekabel WHERE Kabel = 'Rundkabel';




Da einem Kabel dann 3 Farben zugeordnet werden können würde ich im Script ein Array aufbauen. Ich würde ein Formularfeld innerhalb der Datenausgabe des SQLStatements erstellen.



while (Datenausgabe durch SQL erfüllt)
{

<input type="text" name="Kabel[Kabel ID]" value="">

}




Nach dem Abschicken des Formulars wird dann das Array zerlegt und solange kein Leerstring im Value des Array sitzt darf ein Insert in die DB gemacht werden.



while (solange bis letztes Arrayelement durchlaufen ist)
{

SELECT id FROM tabellefarbe WHERE farbe = 'Eingabe aus dem Inputfeld';

if (Arrayvalue != "")
{

INSERT INTO zwischentabelle (idkabel, idfarbe) VALUES ('Arrayvalue', 'Ergebnis aus der letzten Abfrage');

}

}




Damit sollte das ganze sehr dynamisch auf verschiedene Anzahlen von zu tätigen SQLStatements reagieren. Ich hab' in den Beispielen mal die php- Syntax benutzt.

Hoffe konntest was damit anfangen