Auswahldaten einer DB-Tabelle,mit Datensatz einer 2.Tabelle, mittels m:n Verknüpfen.

Davicito

Erfahrenes Mitglied
Ich komme einfach nicht weiter, wie ich, wenn ich beim Anlegen einer Personal, in die Tabelle Mitarbeiter, ein Datensatz zuweise, der in einer 3. Tabelle Kunden steht.

Diese beiden Tabellen sind über eine 2. Tabelle Einsatzort (Beziehungstabelle) m:n-verknüpft.

Ich würde das mit einem INSERT-Befehl in einem Query schreiben wollen. Nun weiß ich allerdings nicht, wie ich mein INSERT weiter ausbauen muss, um beim Anlegen eines Mitarbeiters mit einem bestehenden Kunden verknüpfen kann.
Geht das nicht mit 2 INNER JOINS oder so bzw. erst LEFT JOIN und dann RIGHT JOIN? Hab viel gelesen und doch nichts richtiges gefunden.

Tabellenstruktur:
1. TB: Mitarbeiter: Mitarbeiter_ID

(Beziehungstabelle)
2. TB: Einsatzort: Mitarbeiter_ID
Kunden_ID

3. TB: Kunden: Kunden_ID

PHP:
...
mysql_query("INSERT INTO 
					mitarbeiter 
				SET 
					Anrede_ID='".$_POST["anr"]."', 
					Vorname='".$_POST["vn"]."', 	
					Nachname='".$_POST["nn"]."',
	                Straße ='".$_POST["str"]."',	
					PLZ='".$_POST["plz"]."',
					Ort='".$_POST["ort"]."',
					Telefon='".$_POST["tel"]."',
					Handy='".$_POST["mobi"]."',
					Email='".$_POST["mail"]."',
					Geburtsdatum = str_to_date('".$_POST['geb']."','%d.%m.%Y')
			")OR DIE ("Fehler: ".mysql_error());
...
 
Zuletzt bearbeitet:
INSERT INTO kann nur einen Datensatz in eine Tabelle einfügen. Wenn Du dabei eine Verknüpfung zu einem Datensatz in einer anderen Tabelle herstellen willst, musst Du entweder die ID dieses Datensatzes erst auslesen und dann in das Statement einfügen ODER innerhalb des INSERT INTO mit einem SELECT-Statement die ID dieses Datensatzes auslesen.

Beispiele für letzteres sind im Manual zu finden:
http://dev.mysql.com/doc/refman/5.1/en/insert-select.html
 
Ich will ja nicht nerven, aber kannst du mir mal ein Beispiel posten? Ich hab immer noch keine Ahnung wie ich das realisieren kann.

Meinst du, wenn ich die ID-von Kunden Ausgelesen habe und dann mit einer 2. INSERT-Anweisung
die ausgelesene ID in die Beziehungstabelle eintrage? gibt's kein anderen Weg?
Gruß.
 
Zuletzt bearbeitet:
Nein, ich meinte es so wie es im Manual auch zu sehen ist.

Vereinfachstes Beispiel:
PHP:
$sql = "INSERT INTO tabellenname (spalte1, spalte2, spalte3) SELECT '".$wert1."', tabelle2spalte, '".$wert2."' FROM tabelle2 WHERE irgendwas = 'irgendeinwert'";

Zur Erläuterung:
Dadurch wird aus tabelle2 der Wert in der Spalte tabelle2spalte ausgelesen und zusammen mit den per PHP übergebenen $wert1 und $wert2 in die Tabelle tabellenname als neuer Datensatz eingefügt.
 
Pro Tabelle ein Insert. Du kannst nicht mit einem Insert Statement in zwei Tabellen inserten. Aber warum brauchst du keine Stored Procedure und behandelst den ganzen Prozess darin? Ist eh besser im Bezug auf Sicherheit und Bandbreite.

PS: das Thema sollte ins DB Forum verschoben werden... hat ja nichts mit PHP zu tun....
 
Hi thredi, danke dir... werd ich mal ausprobieren...

Hi BaselBallBatBoy, ich hab keine Ahnung wovon du gerade geredet hast. Das Thema schein mir noch sehr neu und abstrakt!
Bitte um nähere Erklärung!

Gruß.

OK... ich hab jetzt mal die Verdrahtung meiner M:N-Verknüpfung hinbekommen

Hier nochmal die Tabellen:
1. TB: Mitarbeiter: Mitarbeiter_ID

(Beziehungstabelle)
2. TB: Einsatzort: Mitarbeiter_ID
Kunden_ID

3. TB: Kunden: Kunden_ID

Meine Lösung:
PHP:
...
//Anlegen eines Mitarbeiters
mysql_query("INSERT INTO 
				mitarbeiter 
			SET 
				Anrede_ID='".$_POST["anr"]."', 
				Vorname='".$_POST["vn"]."', 	
				Nachname='".$_POST["nn"]."',
				Straße='".$_POST["str"]."',	
				PLZ='".$_POST["plz"]."',
				Ort='".$_POST["ort"]."',
				Telefon='".$_POST["tel"]."',
				Handy='".$_POST["mobi"]."',
				Email='".$_POST["mail"]."',
				Geburtsdatum = str_to_date('".$_POST['geb']."','%d.%m.%Y')										
			") OR die ("Fehler: ".mysql_error());

//Dem soebend angelegten Mitarbeiter, einem Kunden , aus der Kundentabelle, zuordnen.
mysql_query("INSERT INTO 
				einsatzort
			SET 
				Personal_ID = ".mysql_insert_id().", 
				Kunden_ID = ".$_POST['einOrt']." 					 
			") OR die ("Fehler: ".mysql_error());
...

Jetzt habe ich nur noch das Problem mit der Ausgabe:

PHP:
...
$row_dat = mysql_query(" SELECT
				ma.*,
				anr.*									
			FROM 
				anrede AS anr,
				mitarbeiter AS ma
					INNER JOIN(einsatzort AS eo
						INNER JOIN 
								Kunden AS k
							ON
								eo.Kunden_ID = k.Kunden_ID)
						ON ma.Personal_ID = eo.Personal_ID
			WHERE
				ma.Anrede_ID = anr.Anrede_ID 
			        AND
				ma.Vorname = \"".@$_POST['vn']."\"
				AND
				ma.Nachname = \"".@$_POST['nn']."\"
                        ") OR die("Error: $Datensatz <br>".mysql_error());

//Ausgaben aller Mitarbeiterdaten
...

//Problem bei der Ausgabe des Kunden, über die M:N-Verknüpfung!
echo'Kunden:'.$row_dat->kunden;

Bei der Ausgabe erhalte ich folgende Fehermeldung:
Notice: Undefined property: stdClass::$kunden in C:\xampp\htdocs\MA-Update.php on line 14

Wie muss ich die Syntax, in der letzten Zeile, formulieren um zu sehen, bei welchem Kunden ein Mitarbeiter arbeitet?

LG.

OK hab ich jetzt auch noch hinbekommen ^^!
Der Fehler lag in der SELECT-Anweisung

Korrektur:
PHP:
$row_dat = mysql_query(" SELECT
							anr.anrede,
							ma.Vorname,
							ma.Nachname,
							ma.Straße,
							ma.PLZ,
							ma.Ort,
							ma.Telefon,
							ma.Handy,
							ma.Email,
							ma.Geburtsdatum,
							k.kunden							
						FROM 
							anrede AS anr,
							mitarbeiter AS ma
							INNER JOIN(einsatzort AS eo
									INNER JOIN 
										Kunden AS k
									ON
										eo.Kunden_ID = k.Kunden_ID)
								ON ma.Personal_ID = eo.Personal_ID
						WHERE
							ma.Anrede_ID = anr.Anrede_ID 
							AND
							ma.Vorname = \"".@$_POST['vn']."\"
							AND
							ma.Nachname = \"".@$_POST['nn']."\"
	                     ") OR die("Error: $Datensatz <br>".mysql_error());
...
 
Zurück