Beantwortet

MySQL-Abfrage: Offene Aufträge im Versand


Benutzerebene 4
Abzeichen +1

Moin Xentraleers,

wir haben im Versand einen Monitor, auf dem wir zeigen wollen, wie viele Aufträge heute noch erfüllt werden müssen. Ich habe mir dazu einen Bericht gebaut, den ich per importdata in ein Google Sheet ziehe, welches dann auf einer Webseite integriert ist, die sich alle 60 Sekunden selber neu lädt. Klappt alles bestens, bis auf eine Kleinigkeit in der Abfrage. Hier einmal der Code:

SELECT
a.Belegnr AS Auftragsnummer,
a.Datum AS Auftragsdatum,
a.internet AS Internetnummer,
CASE
WHEN a.projekt = 1 THEN 'Marktplatz 1'
WHEN a.projekt = 2 THEN 'Marktplatz 2'
WHEN a.projekt = 3 THEN 'Marktplatz 3'
WHEN a.projekt = 4 THEN 'Marktplatz 4'
ELSE 'Other'
END as Plattform,
CASE
WHEN a.versandart = 'amazonprime' THEN 'Prime'
ELSE 'Standard'
END as Versandart,
CASE
WHEN a.Status = 'freigegeben' THEN 'Hängt im Batch'
WHEN v.Klaergrund <> '' THEN 'Hängt im Versand (Klärfall)'
ELSE 'Hängt im Versand'
END as Status,
CONCAT('https://XXXXXXX.xentral.biz/index.php?module=auftrag&action=edit&id=',a.id) AS Link
FROM auftrag a
LEFT JOIN lieferschein l ON a.id = l.auftragid
LEFT JOIN versand v ON l.id = v.Lieferschein
LEFT JOIN auftrag_protokoll ap ON a.id = ap.auftrag
WHERE a.Status <> 'storniert' AND a.Datum > CURDATE()-INTERVAL 30 DAY AND a.projekt IN (1,2,3,4) AND (v.Tracking IS NULL OR v.Tracking ='') AND (IF((a.versandart = 'amazonprime' AND ap.Zeit < CONCAT(CURDATE(), ' 14:15:00'))OR a.Datum < CURDATE(),1,0) = 1) AND ap.Grund = 'Auftrag importiert vom Shop'
GROUP BY a.Belegnr

Mein Problem ist folgender Part:

v.Tracking IS NULL OR v.Tracking =''

Damit möchte ich Aufträge ausschließen, die schon eine Sendungsnummer haben, also bereits versendet sind. Wenn Aufträge im Versandzentrum mehrfach angefasst werden (z.B. weil bei der Erstellung des Labels mal ein Fehler auftritt), gibt es für diese Aufträge aber mehrere Einträge in der “versand” Tabelle und bei einem davon bleibt v.Tracking = 0. Wie kann ich die Abfrage umbauen, dass nur Aufträge im Ergebnis sind, bei denen alle v.Tracking Felder leer sind? Oder gibt es eine bessere Einschränkung, um nur Aufträge im Ergebnis zu behalten, die nicht versendet wurden?

Danke & Grüße,

Torge

icon

Beste Antwort von Torge 4 November 2022, 09:26

Original anzeigen

4 Antworten

Benutzerebene 7
Abzeichen +5

Hast du es mal mit CONCAT(v.Tracking) ='' probiert?

Benutzerebene 4
Abzeichen +1

Jetzt schon :-) Funktioniert aber leider nicht.

Benutzerebene 6
Abzeichen +5

Eine Idee wäre ggf. noch das Datum abzugleichen, dass das Datum versendet am, mit dem heutigen Tag übereinstimmen muss. Weil das Datum nur gesetzt wird, wenn der Auftrag wirklich auch heute verschickt wurde.

 

Benutzerebene 4
Abzeichen +1

Moin Lucas,

vielen Dank für den Tip. Tatsächlich ist mir nicht ganz klar, wann welcher Eintrag gesetzt wird, wenn es im Versand zu einem Fehler kommt. Hier 2 Beispiele aus der “versand” Tabelle:

 

Lieferschein #1 mit 2 Einträgen in der “versand” Tabelle

und

Lieferschein #2 mit 2 Einträgen in der “versand” Tabelle

Aber: Irgendein Eintrag wird offensichtlich immer gesetzt, daher habe ich es jetzt so gelöst:

((v.Versendet_am_zeitstempel IS NULL OR v.Versendet_am_zeitstempel = '') AND (v.Tracking IS NULL OR v.Tracking = ''))

Damit klappt es wie es aussieht.

Vielen Dank @Lucas Linder und @Daniel Schmidtchen für eure Hilfe!

Besten Gruß,

Torge

Antworten