frezzo Posted May 23, 2016 Share Posted May 23, 2016 Guten Tag an die Community Kann mir jemand helfen bei einer SQL-Abfrage? Und zwar möchte ich alle Bestellen, welche Zahlungsart "Rechnung" bestellt worden sind - abchecken, ob jemals in der diesen Bestellungen der Status "RGanIPAG" gesetzt wurde. Das Ziel ist es - all diejenigen Bestellungen, welche dieser Status nicht gesetzt wurde in ein Excel zu exportieren, damit ich die Aufträge prüfen kann. Weiss jemand das Table, worin der Statusverlauf der Bestellungen getrackt wird? Zahlungsart: Rechnung Siehe Screenshot: http://screencast.com/t/sHurAX2I Herzlichen Dank für Eure Hilfe. Tonino Link to comment Share on other sites More sharing options...
Whiley Posted May 23, 2016 Share Posted May 23, 2016 Hallo Tonino, aktuellen Status findest du in der Tabelle ps_order_history im Feld id_order_state. Aufschlüsseln kanst du dir dir die ID in ps_order_state bzw in ps_order_state_lang. Grüsse Whiley Link to comment Share on other sites More sharing options...
frezzo Posted May 23, 2016 Author Share Posted May 23, 2016 Hallo Whiley Super - herzlichen Dank für den Hinweis, der sooooo schnell gefolgt ist. Meine SQL Abfrage sieht jetzt so aus: Select pstest_order_history.id_order_state, pstest_order_history.id_order, pstest_orders.reference, pstest_orders.date_add, pstest_orders.payment, pstest_orders.current_state, pstest_order_state_lang.name From pstest_order_state Inner Join pstest_order_state_lang On pstest_order_state_lang.id_order_state = pstest_order_state.id_order_state Inner Join pstest_order_history On pstest_order_state_lang.id_order_state = pstest_order_history.id_order_state Inner Join pstest_orders On pstest_order_history.id_order = pstest_orders.id_order Where pstest_order_history.id_order_state Not Like (32) And pstest_orders.payment = 'Rechnung' eigentlich hätte ich gerne alle Bestellung ab dem 18.03.2016 - welche mit Rechnung gesetzt sind - aber NICHT den Status 32 RGanIPAG gesetzt hatten. Weil genau diese Aufträge muss ich prüfen, warum wir keine Rechnung an unser externe System übermittelt haben. Es ist normal, dass dann einige offen sein sollten, weil der aktuelle Status noch nicht versendet ist. Hat jemand eine Idee, wie ich jetzt noch die Bestellungen ab dem 18.03.2016 angezeigt bekomme - und nur diejenigen, die den Status "32" nicht enthalten haben? Herzlicher Gruss und vielen Dank für die Hilfe. Tonino Link to comment Share on other sites More sharing options...
Whiley Posted May 24, 2016 Share Posted May 24, 2016 Hallo Tonino lass dir doch zunächst mal die rel. Daten aller Bestellungen anzeigen, etwa so: SELECT d.id_order, os.id_order_state, os.name AS state, o.payment, o.date_upd FROM pstest_order_detail d LEFT JOIN pstest_orders o ON (d.id_order= o.id_order) LEFT JOIN pstest_order_state_lang os ON (o.current_state = os.id_order_state) Wenn das ok ist blendest du mit "where" die nicht benötigten Bestellungen aus, etwa so: WHERE o.date_upd > '2016-03-17 00:00:00' AND os.id_order_state <>32 AND o.payment='Kauf auf Rechnung' Grüsse Whiley 1 Link to comment Share on other sites More sharing options...
frezzo Posted May 25, 2016 Author Share Posted May 25, 2016 Hallo Whyley Herzlichen Dank für deine erneute Unterstützung - ich werde mich nochmals an die Abfrage setzen - ich bin leider überhaupt kein SQL Spezi - daher tue ich mich in dem Thema natürlich ein ein wenig schwer. Aber dein Inputs hilft mir sicher weiter. Ich Danke vielmals. Tonino Link to comment Share on other sites More sharing options...
frezzo Posted June 8, 2016 Author Share Posted June 8, 2016 (edited) Hallo Zusammen Jetzt bin ich nah dran - bin aber doch nochmals auf ein klein wenig Unterstützung angewiesen... Ich habe nun eine Tabelle mit Xtausend Datensätzen, weil jeder Status Ziel ist es - alle Bestellungen zu filtern, die den Status 32 niemals beinhaltet haben (mit NOT IN? kriege ich das irgendwie nicht gebacken...) wenn ich natürlich AND os.id_order_state <>32 setze - dann habe ich nur noch die Datensätze, die zwar die 32 nicht enthalten, aber so finde ich ja nie heraus in welcher Bestellung der Order-Status 32 nie gesetzt wurde. Sinn der Übung ist, da wir die Rechnungsstellung manuell anstossen (Rechnungsdaten werden dann übertragen) alle Bestellungen zu prüfen, bei denen wir nie eine Rechnung rausgeschickt haben. So sieht meine Daten aus - ID Order 1951 muss nicht angezeigt werden, da Sie den Status 32 enthält jedoch 1955 wurde der Status 32 nie gesetzt - die müsste ich angezeigt bekommen: Hier meine SQL Abfrage: Select d.id_order, o.date_add, os.name As state, o.payment, pstest_order_history.date_add, pstest_order_history.id_order_state From pstest_order_detail d Left Join pstest_orders o On d.id_order = o.id_order Left Join pstest_order_state_lang os On o.current_state = os.id_order_state Inner Join pstest_order_history On pstest_order_history.id_order = o.id_order Where o.date_add > '2016-03-20 00:00:00' And os.name Not Like '%storniert%' And o.payment = 'Rechnung' And os.id_lang = 1 Vielen Dank für die Hilfe und den letzten Kniff. Tonino Edited June 8, 2016 by frezzo (see edit history) Link to comment Share on other sites More sharing options...
eleazar Posted June 9, 2016 Share Posted June 9, 2016 Der INNER JOINT bringt dir nichts. Deiner Abfrage fehlt ein NOT IN oder NOT EXISTS Statement mit einem Sub-Select, um nur die Datensätze anzuzeigen, bei denen der Status nicht gesetzt wurde, etwa in der Art WHERE NOT EXISTS (SELECT '32' FROM ... WHERE ... = ... )Da ich gerade in Urlaub bin, kann ich das leider nicht ausprobieren. Google einfach mal nach Beispielen wie diesem hier: http://www.mwegner.de/php-sql/left-join-not-in-not-exists.html 1 Link to comment Share on other sites More sharing options...
frezzo Posted June 13, 2016 Author Share Posted June 13, 2016 Hallo eleazar Leider habe ich es so nicht hinbekommen - danke das Du dich sogar im Urlaub für uns einsetzt, dass ist grossartig. Kann jemand helfen was beim FROM ... und WHERE .. = ... stehen müsste? Vielen Dank an die SQL-Profies. Gruss, Tonino Link to comment Share on other sites More sharing options...
frezzo Posted June 24, 2016 Author Share Posted June 24, 2016 Hallooo liebe Community Hat mir jemand dazu noch den entscheidenden Hinweis für das SQL? Herzlichen Dank. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now