[MySQL]Relational INSERT Statments

DH_Vie

Grünschnabel
Hi alle zusammen

Ich habe im Moment folgendes problem:
muss ein effizientes insert statment für folgendes schreiben

es gibt primäre abteilungen, welche mehere unterabteilungen haben können und jeder dieser unter abteilungen kann mehere verscheidene mitarbeiter "typen" haben.

Ein Beispiel:

Abteilung: Web
Unterabteilungen: Design, Datenbanken
Design kann mitarbeiter des Typs: Artist order Programmier enthalten
Datenbanken kann mitarbeiter des Typs: Programmiere und Techniker enthalten

die Datebank soll allerdings ermöglichen dass man beispielsweise jederzeit weitere Personaltypen zu jeder Unterabteilung hinzufügen kann, genauso wie weitere unterabteilungen zu den Abteilungen. Die meisten meiner Relations sind also Many2Many .

die tabellen in meiner DB sind im Moment:

Abteilungen: AbtID (prim), AbtName
Unterabteilungen: UAbtID (prim), UAbtName
MitarbeiterTyp: TypID (prim), TypName
Mitarbeiter: MitID(prim), name etc..

link_typ_unterabteilung: TypID1, UAbtID1
link_unterabteilung_abteilung: UAbtID1, AbtID1
link_typ_abteilung: AbtID1, UAbtID1
link_mitarbeiter_unterabteilung: MitID1, UAbtID1
link_mitarbeiter_typ: MitID1, TypID1

Ich weis das die letzte tabelle in meinem beispiel hier nicht soo viel sinn macht und eigentlich ein foreign key in Mitarbeiter mehr sinn machen würde, aber geht einfach davon aus, dass ein Mitarbeiter von mehreren Typen sein darf.

Meine frage ist jetzt folgende:
Wie forumuliere ich ein effizientes INSERT statment wenn ich einen neuen mitarbeiter einer Abteilung und underabteilung zuweisen will:

mein gedanken gang wäre dieser:

neuen Mitarbeiter einfugen ---> dessen MitID dann "link_mitarbeiter_typ" und "link_mitarbeiter_unterabteilung" einfügen.

was für möglichkeiten würdet ihr sehen das zu tun, denn ich suche nauch einer möglichkeite die möglichst wenig queries benutzt, und die einzige auf die ich gekommen bin war:

INSERT INTO Mitarbeiter(name, etc...) VALUES(SeinName, etc...);
SELECT MitID FROM Mitarbeiter WHERE name=SeinName straße=SeineStraße;
SELECT TypID FROM MitarbeiterTyp WHERE name=derTyp;
SELECT UAbtID FROM Unterabteilungen WHERE name=DieUAbt;
INSERT INTO link_mitarbeiter_typ(MitID1, TypID1) VALUES (MitID, TypID);
INSERT INTO link_mitarbeiter_unterabteilung(MitID1, UAbtID1) VALUES (MitID, UAbtID);

und meiner meinung nach kann das unmöglich der beste weg sein den job zu erledigen.

Danke für die Hilfe

DH_vie
 
Eine weitere art wäre auch:

INSERT INTO Mitarbeiter(name, etc...) VALUES(SeinName, etc...);
INSERT INTO link_mitarbeiter_typ(MitID1, TypID1) SELECT mitarbeiter.MitID, MitarbeiterTyp.TypID FROM Mitarbeiter, Mitarbeiter Typ WHERE .......

Und dasselbe auch für die andere "link_" tabelle, allerdings weiß ich noch nicht wie ich das SELECT statment formulieren sollte um die gewünscheten infos zu erhalten.

Alles würde aber meiner meinung nach noch viel einfacher gehen, wenn es eine möglichkeit gäbe direct nach dem ersten INSERT die MitID des neu-eingefügten mitarbeiters zu bekommen, nachdem es ein prim key mit auto-inc ist...
 
Zuletzt bearbeitet:
hab jetzt herausgefunden das ich in PHP msql_insert_id benutzen kann um die ID des letzten INSERTs herauszufinden, was mein problem nun gelöst hat.

Danke
 

Neue Beiträge

Zurück