Ich möchte einen Cronjob erstellen, welcher alle Kunden eines XT-Commerce-Shop v4.2 anschreibt, welche seit 5 Monaten keinen Einkauf mehr getätigt haben. Leider hänge ich (mal wieder) am ermitteln der MAX(orders_id) der Kunden. Zu meiner bisherigen Vorgehensweise:
Ich frage zunächst die orders_id zu allen Bestellungen in der xt_orders_status_history ab, welche das Datum von heute vor 5 Monaten haben (Variable $today2):
Die orders_status_id = '16' tut hier nicht viel zur Sache, bedeutet aber bei einem XT-Commerce-Shop in der Regel den Status "Offen", also gerade vom Kunden bestellt und vom Shop-Inhaber noch nicht weiter bearbeitet.
Innerhalb einer While-Schleife (geht sicher auch allles innerhalb einer einzigen Abfrage) erstelle ich eine weitere Abfrage, welche zu der jeweiligen orders_id die entsprechende customers_id ermittelt, da diese in der Tabelle xt_orders_status_history nicht existiert:
Und genau an dieser Stelle hänge ich jetzt. Ich muss praktisch prüfen, dass die verwendete orders_id bei dem Kunden mit der damit verbundenen customers_id auch die letzte Bestellung dieses Kunden (MAX(orders_id)) war. Ansonsten soll dieser ja NICHT angeschrieben werden, da mind. eine weitere Bestellung existiert, die noch keine 5 Monate her ist! Zäume ich das Pferd mit meinen Abfragen hier von der falschen Seite auf? Ich hätte halt gerne vermieden, dass ich erst ein Array erstelle, welches alle MAX(orders_id) zu jedem Kunden ermittelt und in einem Array speichert, da bei diesem Shop knapp 100.000 Bestellungen von 50.000 Kunden vorliegen. Ansonsten wäre sicherlich mit dieser Abfrage ein Array-Vergleich möglich:
Ich frage zunächst die orders_id zu allen Bestellungen in der xt_orders_status_history ab, welche das Datum von heute vor 5 Monaten haben (Variable $today2):
Code:
SELECT orders_id FROM xt_orders_status_history WHERE orders_status_id = '16' AND date_added LIKE '%$today2%'
Innerhalb einer While-Schleife (geht sicher auch allles innerhalb einer einzigen Abfrage) erstelle ich eine weitere Abfrage, welche zu der jeweiligen orders_id die entsprechende customers_id ermittelt, da diese in der Tabelle xt_orders_status_history nicht existiert:
Code:
SELECT orders_id, customers_id FROM xt_orders WHERE orders_id = '$orders_id' AND orders_id = (SELECT MAX(orders_id) FROM xt_orders WHERE ...
Code:
SELECT * FROM `table` WHERE `id` IN ('Array') ...
Kommentar