Jump to content

SQL Abfrage - Status abfrage


frezzo

Recommended Posts

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

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

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

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

  • Like 1
Link to comment
Share on other sites

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

  • 2 weeks later...

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:

2016-06-09_0002.png

 

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 by frezzo (see edit history)
Link to comment
Share on other sites

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
  • Like 1
Link to comment
Share on other sites

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

  • 2 weeks later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...