Eine CSV Datei mit allen Bestellungen der letzten 12 Monate, die folgende Angaben auflistet:
Vorname und Name,
PLZ und Stadt
Telefonnummer und
Wert der Bestellung
lässt sich im Backend mit einem SQL Befehl erstellen.
Erweiterte Parameter > Datenbank > SQL-Manager
Hier eine neue SQL Abfrage erstellen „Bestellungen_letzte_12_Monate“
SELECT
a.firstname AS 'Vorname',
a.lastname AS 'Name',
ad.postcode AS 'PLZ',
ad.city AS 'Stadt',
cl.name AS 'Land',
COALESCE(ad.phone, ad.phone_mobile) AS 'Telefonnummer',
o.total_paid_tax_incl AS 'Bestellwert',
o.date_add AS 'Datum'
FROM ps_orders o
LEFT JOIN ps_customer a ON (o.id_customer = a.id_customer)
LEFT JOIN ps_address ad ON (o.id_address_delivery = ad.id_address)
LEFT JOIN ps_country_lang cl ON (ad.id_country = cl.id_country AND cl.id_lang = 1)
WHERE o.date_add >= DATE_SUB(NOW(), INTERVAL 12 MONTH)
ORDER BY o.date_add DESC
Das kleine o hinter ps_orders ist ein sogenannter Alias.
Anstatt jedes Mal ps_orders.id_customer zu schreiben, reicht durch den Alias ein kurzes o.id_customer. Das macht den Code viel übersichtlicher, besonders wenn viele Tabellen im Spiel sind.
FROM ps_orders o: Hier wird festgelegt: ps_orders heißt ab jetzt o.
LEFT JOIN ps_customer a: Hier wird ps_customer der Alias a gegeben.
LEFT JOIN ps_address ad: Hier bekommt die Adress-Tabelle den Namen ad.
Der SQL Befehl COALESCE (englisch für „verschmelzen“ oder „vereinigen“) ist eine Funktion, die bedeutet „Nimm den ersten Wert, der nicht leer ist“.
Bei PrestaShop gibt es oft zwei Felder für Telefonnummern:
phone (Festnetz)
phone_mobile (Mobiltelefon)
Nicht jeder Kunde füllt beide Felder aus. Manche geben nur das Handy an, manche nur das Festnetz. Würdest du nur nach phone fragen, hättest du bei vielen Kunden ein leeres Feld in deiner CSV-Datei.
So funktioniert COALESCE(ad.phone, ad.phone_mobile):
Die Datenbank geht die Liste der Argumente von links nach rechts durch und gibt den ersten Wert zurück, der nicht NULL (leer) ist:
Die Datenbank schaut in ad.phone. Ist dort eine Nummer? Wenn ja, nimm sie und fertig.
Ist ad.phone leer (NULL)? Dann schau in ad.phone_mobile. Ist dort eine Nummer? Wenn ja, nimm diese.
Sind beide leer? Dann bleibt das Feld in deiner CSV leer.
Nach dem Speichere der Abfrage lässt sich durch Klick in der Liste daneben eine saubere CSV-Datei downloaden.

