Verständnisfrage zu Order-Tabelle

Ich habe eine Verständnisfrage zur Order-Tabelle:
Warum stehen dort manche Bestellungen mehrmals mit nahezu identischem Daten? Wie ist das zu verstehen. Der einzige Unterschied ist im Feld „version_id“ zu erkennen.
Vielen Dank.

Wenn Änderungen an der Order vorgenommen werden, z. B. Statusänderung, wird eine neuer Eintrag mit einer anderen VersionsID erstellt.

Korrigiert mich, wenn ich falsch liege.

Bei reinen Statusänderungen wird kein neuer Eintrag gemacht, aber wenn du z.B. ein Dokument erstellst für die Bestellung.

OK, und aus welchen Gründen genau bei Dokumenten?

Den Grund findest Du in der document-Tabelle, dort ist das Dokument mit der Version der Order verknüpft zum Zeitpunkt der Dokument Erstellung.
Evtl. aus Gründen der Nachvollziehbarkeit oder rechtlichen Gründen, da kenne ich mich nicht aus, sorry.

Ah ok, ist ein Argument und nachvollziehbar. Vielen Dank für die Informationen.

Tatsächlich ist die Order Tabelle wohl die einzige, die die Versionierung nutzt. Wirklich relevant ist aber erst wenn man Änderungen an der Order macht; z.B. wenn der Order im Backend ein neuer Artikel hinzugefügt wird oder ein Artikel wird entfernt weil dieser vielleicht nicht mehr lieferbar ist. Hier wird dann tatsächlich eine Version erstellt (inkl. der LineItems). Nach dem finalen Speichern wird die temporäre Version zur aktuellen.
Wenn man nun einen Lieferschein erzeugt, muss sich dieser ja auf die aktuellen Produkte beziehen. Sprich dann ist natürlich sinnvoll wenn die „alten“ Versionen erhalten bleiben.

herzlichst

CH

Wird ein Artikel in einer bestehenden Bestellung hinzugefügt, dann gibt es einen neuen Eintrag in der Tabelle „order“.
Es sind dann mehrere Eintrag in Tabelle „order“ mit der gleichen „order_number“.

Der Eintrag mit der höchsten Zahl in der Spalte „auto_increment“ ist die aktuelle Bestellung?

Ich „vermute“ mal, dass das dann so ist. Technisch richtig ist das Verfahren aber deutlich komplexer. Die Order-Tabelle ist aktuell die einzige Tabelle, die die Versionierung wirklich nutzt.
Wenn man im Backend eine bestehende Order bearbeitet, dann wird diese zunächst versioniert. Danach kann die Order bearbeitet werden (also CRUD). Und beim Speichern, die neue Version zurück in die bestehende Order gemergt.
Und doch die UUID verliert man spätestens dann komplett den Überblick :frowning:

LG


Bei Fragen einfach fragen

Ich möchte Bestellungen per MySQL exportieren. Solange die Bestellung im Ursprungszustand ist, funktioniert alles soweit gut, aber bald eine Bestellung im Backend geändert wird, hauts mit dem Export nicht mehr hin.

Grob schaut die Abfrage wie folgt aus:

$sql = "SELECT * FROM order


WHERE order_number = $order_nummer and billing_address_id = order_address.id ORDER BY position";

Wurde eine Bestellung im Backend geändert, dann gibt es in der Tabelle „order“ weitere Einträge mit der gleichen Bestellnummer, welche in der Spalte „auto_increment“ hochgezählt wird.

Wenn ich jetzt probeweise wie folgt abfrage: WHERE auto_increment = 153

Fatal error: Uncaught mysqli_sql_exception: Column ‚auto_increment‘ in where clause is ambiguous in

Wie kann ich folgende Bedingung abfragen:

order_nummer = „123“ and auto_increment "entsprechend der höchste Wert, welcher in der Spalte auto_increment hinterlegt ist?

der Primary Key ist id zusammen mit version_id. Und dahin sind auch andere Daten (z.B. die Items) verlinkt. Bei der auto_increment spalte müsste das eigentlich umgekehrt sein. Jede Änderung bekommt zwar einen höheren Wert aber am Ende lande die „gemergte“ Order wieder auf der kleinsten id. Schau in die Spalte „updated_at“.

select *  
from `order` o 
where order_number = "4711"
and  auto_increment = (select max(auto_increment) from `order` where order_number = "4711")

Danke für deine Hilfe, im phpMyAdmin habe ich die korrekt Ausgabe erhalten, aber in mein Script eingebaut funktioniert es nicht.

$sql = "
SELECT * FROM order
WHERE order_number = $order_number
and auto_increment = (select max(auto_increment) from order where order_number = $order_number)
and billing_address_id = order_address.id ORDER BY position
";

Ich war auch schon über die version-ID gestolpert.
created_at als Filter sollte helfen

$sql = "
SELECT * FROM order
WHERE order_number = '$order_number'
and auto_increment = (select max(auto_increment) from order where order_number = '$order_number')
...

da order_number ein string ist, gehören dann auch quotes drum

Wie fragt denn Shopware die Daten einer Bestellung im Backend ab? Wo finde ich die entsprechenden Befehle?