Kann ich das Ding "..\_samples\OrderWriteService\overload_example_order_write_service.inc.php" umbauen um o.g. Ziel zu erreichen? (Ja/Nein wäre a´bisserl zu wenig) Wunschziel: Das Datum in eine Tabelle schreiben (insert) - diese wird zu einem späteren Zeitpunkt von einem eigenen Script ausgewertet* und wieder geleert. *) Schlussendlich brauche ich das Datum, das am weitesten vom aktuellen Datum entfernt ist, an dem an einer "order" Bestell-Status oder Berechnungen geändert wurden. Für zielführende Tipps, bereits jetzt besten Dank!
Wird bei Änderungen (Summen usw.) an der Bestellung leider nicht aktualisert ... und bei "orders" > 300.000 auch nicht soooo optimal.
Letzte Status Änderung bringt dir dann ja auch nix, evtl. musst ne Funktion anhängen die bei änderungen was in ne tabelle für dich schreibt
Hi, es gibt die orders_status_history, wo das Datum der letzen Änderung für den Bestellstatus steht. Dann gibt es noch in der orders das Datum wann die letze Änderung an Bestellung durchgeführt wurde. Hier könnte man aus beiden eine Abfrage basteln der dir immer das jüngere Datum zurückliefert. Beispiel: Code: SELECT CASE WHEN last_modified > date_added THEN last_modified ELSE date_added END AS datum FROM orders, orders_status_history
Hallo Till, das führt mich nicht wirklich zum gewünschten Ziel. Beispiel: Wenn am 11.12. die "orders" vom 01.12. geändert wurde, brauche ich den "01.12" nicht den "11.12" ... usw. Außerdem geht´s hier mSek ... deshalb die Idee, dass datt o.g Overload das Datum mal eben in eine gesonderte Tabelle schreibt und ich mir nur bei Bedarf das älteste Datum auslese.
@Manfred Einfach die Abfrage oben umdrehen, Code: SELECT CASE WHEN last_modified < date_added THEN last_modified ELSE date_added END AS datum FROM orders, orders_status_history
Wenn ich das richtig verstehe, geht es um das date_purchased derjenigen Bestellungen, die zuletzt geändert wurden … ?! @Manfred, ignoriere mal komplett die Datenstrukturen und beschreibe einfach in Prosa das Problem, das du zu lösen versuchst.
Der bringt endlos Das verstehst Du absolut richtig! Noch ebbes genauer: Im Verlauf eines/mehrerer Admin-Arbeitstage wird es eine "Liste" geben, von "date_purchased" der geänderten/bearbeiten Orders. Mein Script braucht beim 1.Start das "date_purchased", dass vom aktuellem Datum (heute) am Weitesten entfernst ist - also datt Älteste oder Kleinste.
@Manfred Kannst du das bitte noch mal anders beschreiben. Was ist dein Ziel? Was möchtest du genau machen. Am besten erzählst du uns ganz genau was du vorhast. Wir können dir noch nicht ganz folgen.
Also .. mal anders rum: Dieses ominöse Statistik-Modul speichert in einer eigenen Tabelle Summen, die u.a. aus der "orders" gebildet werden. Beim Start diese Modul wird erkannt, dass die letzte Aktualisierung der "orders" von der letzten Aktualisierung meiner Tabelle abweicht => Handlungsbedarf! Bis jetzt wird dann die ganze "orders" gelesen und die Daten in meiner Tabelle neu geschrieben. Bis 100.000 "orders" ist das in 2-3Sek gelaufen - bei "Orders" > 300.000 dauert es mit ca. 5Sek mir a´bisserl zu lange. Inzwischen werden im normalen Admin-Alltag zahlreiche "orders" bearbeitet z.B. Änderungen der Bestell-Status usw. Wenn ich also wüsste, <jetzt wird´s wieder schwierig> welches das älteste Datum (date_purchased) einer bearbeiteten "orders" ist, kann ich dort einsteigen (die Routine ist vorhanden) und muss nicht die gesamte Orders durchwühlen.
Du suchst quasi die älteste Bestellung die an einem Tag bearbeitet wurde. Sprich wenn ich heute alles von Gestern und wegen Geldeingang eine von Anfang Dezember bearbeite und versende dann willst du das Datum der Bestellung Anfang dezember wissen, damit du ab da alles neu berechnen lassen kannst. Und wie berechnest du oder speicherst du das davor gewesene? Fasst du da z.B. Monatsweise schon zusammen und würdest dann nur ab dem Monat der ältesten Bestellung neu berechnen lassen. speicher doch einfach bei welcher ID gerade der auto-dingsbums in der status History Tabelle steht und dann weißt ab wo neue Änderungen dazu kamen und bei welchen bestellungen. Dann hast die ganzen IDs und lässt die neu berechnen.
@Manfred Warum so kompliziert. Kopier doch einfach jedes mal alle Daten neu, mit nur einem SQL Befehl, das geht schnell und du musst keine PHP Abfragen basteln die das Auslesen der MySQL Daten blockieren. Denn solange das PHP läuft wartet der SQL und hat nichts zu tun, bis PHP mit dem Verarbeiten der Daten fertrig ist. Code: INSERT INTO mystatistic (SELECT value FROM orders_total WHERE ot_class='ot_total'); Wenn du in PHP eine Schleife hast um über alle Datensätze zu laufen, dann ist das langsamer als wenn du das über MySQL direkt machen lässt.
Also im Prinzip Code: SELECT MIN(date_purchased) FROM orders WHERE orders.last_modified >= '2017-12-01' … wenn last_modified zuverlässig wäre.
Das ist der 1. Schönheits-Fehler! Der 2. ist: Ich möchte nicht erst die "orders" und evtl. noch weitere Tabellen durchsuchen - ich möchte das ominöse "date_purchase" sofort aus eigener Tabelle auslesen! Deshalb die Eingangsfrage, ob datt Overload-Dingens das nebenbei erledigen kann.