# [MySQL] 2 Tabellen gleichzeitig füllen



## OnkelHomie (18. Mai 2008)

Hallo zusammen,

ich versuche mir gerade mal etwas PHP&MySQL anzueignen und bastel dazu nen kleinen Webshop. Nun hab ich folgende Frage bzw. folgendes "Problem" vor mir:

- ich habe 2 Tabellen für die Kundendaten:
-> Tab_1: Kunden (Kunden_ID, Nachname, Vorname, Passwort, Mail, Telefon
-> Tab_2: Adresse (Adress_ID, Kunden_ID, Nachname, Vorname, Strasse, HausNr, PLZ, Ort)

In Tab_1 ist die Kunden_ID PrimaryKey und in Tab_2 ist die Kunden_ID ForeignKey.

Meine genau Frage ist/sind nun:
Wenn man nun über das Registrierungsformular seine Daten abschickt, muss man dann beim INSERT INTO die Kunden_ID sowie Nachname und Vorname in beide Tabellen eintragen, oder kann man die Tabellen auch vorher mittels Join zusammenführen und sie dann ausfüllen und sich somit Arbeit ersparen? (ich habe bisher Join fast ausschließlich nur in Select Anweisungen gesehen und auch 1 mal als Update)

Und da Kunden_ID ja eine feste Verbindung darstellt, wird diese nicht so oder so automatisch auch in Tab_2 eingetragen, wenn sie in Tab_1 eingetragen wird.

Vielleicht kann mir ja jemand da mal auf die Sprünge helfen.
Besten Dank schon mal im Voraus.


----------



## zeja (18. Mai 2008)

Nachname und Vorname sollten in Tab_2 eigentlich gar nicht stehen, denn sie stehen ja schon in Tab_1.

Nen Join kannst du in dem Fall nicht machen, da du dann ja angeben möchtest über was du den join ausführen möchtest und das ist nicht möglich solang noch keine Daten eingetragen sind, da insbesondere die KundenID dann noch nicht existiert.

Also ein Insert um in Tab_1 die Daten anzulegen und die KundenID zu bekommen und dann die Daten in Tab_2 eintragen.


----------



## OnkelHomie (18. Mai 2008)

Die Idee hinter den doppelten Einträgen ist, dass es ja durchaus vorkommen kann, dass ein Kunde mal an ne andere Adresse verschicken will und diese dann aber auch gespeichert werden soll (a la Amazon, so kam ich auf die Idee). Daher die getrennte Adresstabelle. Dann kan halt eine KundenID dort mherere Versandadressen haben.

Aber danke für die Antwort. Dann muss ich mir darüber wohl nicht weiter den Kopf zerbrechen.


----------



## zeja (18. Mai 2008)

Ja das ist ja auch gut so mit den beiden Tabellen. Aber Name und Vorname mußt du doch nicht doppelt speichern. Wenn du die haben willst machst du nen Join über eine Kunden-ID und dann ist gut.

Daten doppelt ablegen ist nur selten eine gute Idee.

Aber womit hast du denn nun noch ein Problem?

Dort steht wie du an die Kunden-ID kommst sofern du Auto-Increment verwendest: http://www.php-faq.de/q/q-mysql-auto-increment.html


----------



## OnkelHomie (18. Mai 2008)

Aber es kann doch auch mal sein das man z.B. etwas als Geschenk verschicken will und man dann nicht nur eine andere Adresse sondern auch andere Namen benötigt. Daher eben die doppelten Einträge. Das man die an sich vermeiden sollte ist mir sonst schon bekannt.
Jeder Kunde hat somit per default eine Adresse, kann aber eben auch zu seiner Kundenummer mehrere Adressen im laufe der Zeit ansammeln.

Ich habe halt bisher nur ganz simple SQL Sachen gemacht udn niw wirklich mit 2 verknüpften tabellen gearbeitet. Daher hab ich mir diese version ausgedacht und wollte es damit halt probieren/lernen, dazu eben das praktische Beispiel eines Webshops. (auto_increment war mir aber schon bekannt, trotzdem danke nochmal für den Hinweis)

Und mein Gedanke war halt nur, dass man von vornerein schon beim ersten Befüllen der Tabellen, diese beiden joinen kann um nur ein mal nen insert zu machen. Zu muss man eben, wie du schon geschrieben hast, zunächst die Tabelle mit den Kundendaten füllen, dann nochmal ne weitere Anfrage starten und die zweite Tabelle befüllen. Ich dachte das könnte eleganter lösen und sich damit eben ein paar Zeilen sparen, indem man vorher festlegt das eben 3 Felder eh den gleichen Inhalt bekommen sollen. 

Wenn die erste Anmeldung des Kunden erfolgt ist, kann er zu seiner ID weitere Adressen hinzufügen, sich also quasi ein eigenes Adressbuch anlegen.


----------



## zeja (18. Mai 2008)

Ahso okay. Dann macht das mit dem Namen Sinn. Ich dachte du willst da immer den selben Namen nochmal eintragen.

Aber alles in einer Zeile lösen muß ja nicht unbedingt schneller sein. Ein paar Zeilen schreiben ist doch schon okay. Und es sind ja nur zwei Inserts mit einer mysql_insert_id dazwischen.


----------



## OnkelHomie (18. Mai 2008)

Hab auch nebnebei mal "aufgezeichnet" wie ich mir die Beziehungen vorstelle, siehe Anhang.

Und ja du hast schon recht, so viel mehr ist es nicht. Ich dachte eben nur (zu viel denken kann auch schlecht sein ) das ich hier schon direkt was neues anwenden kann und es eben ggf. da auch schon Sinn macht.


----------

