PaSt: mehrere Statments verknüpfen

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

  1. Hallo,

    -- mMn sollten Vorname, Name, Adresse sowie PLZ_Ort verglichen werden eMail kann ja ändern ohne dass sich die Lieferadresse ändert.

    so wie man Rechnungen über Rechnungsnummern identifiziert, so identifiziert man Kunden über ihre Kundennummer. Das ist üblich.

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz

      Besten Dank für deine Antwort.

      -- mMn sollten Vorname, Name, Adresse sowie PLZ_Ort verglichen werden eMail kann ja ändern ohne dass sich die Lieferadresse ändert.

      so wie man Rechnungen über Rechnungsnummern identifiziert, so identifiziert man Kunden über ihre Kundennummer. Das ist üblich.

      Das identifizieren des Kunden ist ja auch kein Problem. Mein Hauptproblem besteht eigentlich darin, wie ich die einzelnen Statments miteinander verknüpfe respektive Variablen weitergeben kann.
      Da die Auftragsnummer unique sein sollte, darf ja während dem Abfragen der letzten Nummer und dem Eintragen der Neuen keine weitere Nummer vergeben werden.

      gruss

      1. Hallo,

        Das identifizieren des Kunden ist ja auch kein Problem. Mein Hauptproblem besteht eigentlich darin, wie ich die einzelnen Statments miteinander verknüpfe respektive Variablen weitergeben kann.

        Du könntest alles in eine Stored Procedure packen.

        Da die Auftragsnummer unique sein sollte, darf ja während dem Abfragen der letzten Nummer und dem Eintragen der Neuen keine weitere Nummer vergeben werden.

        LAST_INSERT_ID ist verbindungsspezifisch. Du wirst nicht einen auto_increment-Wert bekommen, der in einer anderen Verbindung vergeben wurde.

        Freundliche Grüße

        Vinzenz