Hi Leute
Ich möchte eine Bestellung in eine Datenbank oder besser gesagt zwei Tabellen eintragen.
In der einten Tabelle werden die Kundendaten gespeichert und in der anderen die Bestellung.
Verknüpft sollen beide Tabellen über Kunden.ID = Bestellung.Kunden_ID.
Leider komme ich nicht weiter.
ich arbeite mit:
DB mySQL Version 5.0.45.
PHP Version > 5
So sehen die Tabellenlayouts aus
Tabelle Bestellen
ID int(5) auto_increment
Auftrags_Nr bigint(15)
Datum timestamp CURRENT_TIMESTAMP (on insert)
Kunden_ID int(5)
Artikel_Nr varchar(10) utf8_general_ci
Menge int(4)
Tabelle Kunden
ID int(5) auto_increment
Vorname varchar(40) utf8_general_ci
Name varchar(40) utf8_general_ci
Adresse varchar(100) utf8_general_ci
PLZ_Ort varchar(100) utf8_general_ci
eMail varchar(50) utf8_general_ci
Ich habe mir folgenden Programm-/Funktions-Ablauf überlegt 1.-4.
1\. Prüfen ob bereits Kunde vorhanden ist [ja gehe zu 3. | nein gehe zu 2.]
-- mMn sollten Vorname, Name, Adresse sowie PLZ_Ort verglichen werden eMail kann ja ändern ohne dass sich die Lieferadresse ändert.
-- Wie vergleiche ich hier am sinnvollsten? Einfach ein SELECT über die oben angegebenen Spalten?
-- Rückgabe der Kunden.ID (auto_increment)
2\. Erzeuge Kunde, sowie Rückgabe der Kunden.ID (auto_increment)
INSERT INTO
Kunden
SET
Vorname = $Vorname,
Name = $Name,
Adresse = $Adresse,
PLZ_Ort = $PLZ_Ort,
eMail = $eMail
-- Rückgabe der Kunden.ID (auto_increment)
-- in php wäre es mysql_insert_id() -> SQL?
3\. Bestellung eintragen, sowie Rückgabe der Bestellungen.ID (auto_increment)
-- muss evtl mehrmals, also in einer Schleife aufgerufen werden, da in einer Bestellung mehrere Artikel vorkommen können
INSERT INTO
Bestellungen
SET
Auftrags_Nr= --{Eindeutige ID, am besten YYYYMMDD###, sprich Datum und einer fortlaufenden Zahl falls an diesem Datum bereits eine Bestellung eingegangen sein sollte }
Kunden_ID = Kunden.ID, -- ID des Kunden aus 1. oder 2.
Artikel_Nr = $Artikelnummer,
Menge = $Menge
-- Rückgabe der Bestellungen.ID (auto_increment)
-- in php wäre es mysql_insert_id() -> SQL?
4\. Ausgabe der Auftrags_Nr welche in 3. vergeben wurde.
SELECT
Auftrags_Nr
FROM
Bestellungen
WHERE
ID = LAST_INSERT_ID()
Frage:
Soll ich alles in SQL, als 1 Statement (Wie sähe das dan in etwa aus?) oder als 4 einzelne Statements, welche mit PHP aufbereitet werden, abarbeiten?
Wenn mit PHP besteht da nicht die Gefahr, dass es passieren kann, dass wenn zum Beispiel zwei oder mehrere Personen gleichzeitig bestellen es zu einer Vermischung von Kunden-ID und Bestellung kommen könnte?
Oder dass der Kunde schlussendlich eine falsche Auftragsnummer bekommen kann?
Denn nach jedem mysql_query() besteht ja die Möglichkeit, dass ein anderes Query dazwischen funkt, oder ist das falsch?
Wie gehe ich am besten weiter vor oder ist alles Müll?
Bin für alle Tipps dankbar
Ich hoffe ich habe es einigermassen klar formuliert.
gruss