Shop Hosting
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Abfrage nicht verkaufter Artikel im Zeitraum X

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Ich würde gerne auswerten, welche Artikel sich z.B. in den ersten vier Monaten dieses Jahres NICHT verkauft haben.

    Irgendwie komme ich nicht weiter. Viele Varianten probiert, aber anscheinend bin ich auf dem Holzweg.

    Mit
    Code: SQL  [Auswählen]
    SELECT p.products_model
    FROM products p  
    JOIN orders_products op ON op.products_model = p.products_model
    JOIN orders o ON o.orders_id = op.orders_id
    WHERE DATE(o.date_purchased) BETWEEN "2020-01-01" AND "2020-04-30"
    ;

    bekomme ich die Artikel angezeigt, die in der Zeit verkauft wurden.

    Mit

    Code: SQL  [Auswählen]
    SELECT p.products_model
    FROM products p  
    JOIN orders_products op ON op.products_model = p.products_model
    JOIN orders o ON o.orders_id = op.orders_id
    WHERE DATE(o.date_purchased) BETWEEN "2020-01-01" AND "2020-04-30" AND op.products_model IS NULL
    ;

    dachte ich, bekomme ich die angezeigt, die nicht in der orders_products stehen. Aber da kommt immer ein leeres Ergebnis  :-?

    Mit
    Code: SQL  [Auswählen]
    SELECT p.products_model
    FROM products p  
    LEFT JOIN orders_products op ON op.products_model = p.products_model
    LEFT JOIN orders o ON o.orders_id = op.orders_id
    WHERE op.products_model IS NULL

    Bekomme ich anscheinend alle Artikel die noch nie verkauft wurden, also hängt es irgendwo bei der zeitlichen Begrenzung.

    Jemand einen Tipp?

    Linkback: https://www.modified-shop.org/forum/index.php?topic=41055.0

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Re: Abfrage nicht verkaufter Artikel im Zeitraum X
    Antwort #1 am: 06. Mai 2020, 10:30:20
    Mir würde ad hoc das hier einfallen:
    Code: SQL  [Auswählen]
    SELECT products_model, products_id
      FROM products
     WHERE products_id NOT IN (SELECT DISTINCT products_id
                                 FROM orders_products);

    Gruß,
    noRiddle

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Re: Abfrage nicht verkaufter Artikel im Zeitraum X
    Antwort #2 am: 06. Mai 2020, 12:06:10
    Hallo noRiddle,
    danke für deine Antwort. Mit deiner Abfrage bekomme ich die Artikel raus, die noch NIE verkauft wurden. Ich möchte gerne noch einen Zeitraum dazu haben.

    z.B. in den ersten vier Monaten 2020
    Code: SQL  [Auswählen]
    WHERE DATE(o.date_purchased) BETWEEN "2020-01-01" AND "2020-04-30"

    EDIT* Namen korrigiert, sorry *

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Re: Abfrage nicht verkaufter Artikel im Zeitraum X
    Antwort #3 am: 06. Mai 2020, 12:20:52
    Wenn deine eigenen Bemühungen sich auch darin äußern, daß du anfängst meinen Namen richtig zu schreiben könnte ich nochmal nachdenken... :beef:

    Erweitere doch die Sub-Query einfach:
    Code: SQL  [Auswählen]
    SELECT products_model, products_id
      FROM products
     WHERE products_id NOT IN (SELECT DISTINCT op.products_id
                                 FROM orders_products op
                                 JOIN orders o
                                   ON o.orders_id = op.orders_id
                                WHERE o.date_purchased BETWEEN '2020-01-01 00:00:00' AND '2020-05-01 00:00:00');

    Wenn du bei einem datetime-Feld die Uhrzeit weglässt bekommst du wahrscheinlich verkehrte Ergebnisse (ein Tag zu wenig) weil mySQL auf 00:00:00 zurückfällt und dir dann der letzte Tag fehlt ('2020-04-30 00:00:00').

    Nicht getestet !

    Gruß,
    noRiddle

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Re: Abfrage nicht verkaufter Artikel im Zeitraum X
    Antwort #4 am: 06. Mai 2020, 12:34:10
    Danke. Name ist korrigiert  :-) . Da war die linke Hand mal wieder schneller als die rechte.

    Nach Deiner ersten Vorlage habe ich noch

    Code: SQL  [Auswählen]
    SELECT p.products_model
    FROM products AS p
    WHERE  p.products_id NOT IN
    (
    SELECT DISTINCT op.products_id
    FROM orders o  
    JOIN orders_products op ON op.orders_id = o.orders_id
    WHERE DATE(o.date_purchased) BETWEEN '2020-01-01 00:00:00' AND '2020-05-01 00:00:00'
    )

    probiert (die Zeit jetzt noch angepasst auf den zweiten Post). Das dürfte das gleiche sein!?! Tue mich da noch mit dem Syntax lesen etwas schwer. Zumindest bringt beides das gleiche Ergebnis was die Trefferanzahl angeht.

     :thx:

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Re: Abfrage nicht verkaufter Artikel im Zeitraum X
    Antwort #5 am: 06. Mai 2020, 12:42:02
    Wäre dasselbe in grün wenn du die DATE-Funktion weglassen würdest. Du gibst die Uhrzeit mit an um mittels DATE() wieder auf lediglich das Datum zu reduzieren ?
    Macht nicht wirklich Sinn.

    Wenn man sicher gehen möchte, daß BETWEEN bei datetime-Feldern auch richtig funktioniert, kann  man statt dessen auch das machen:
    Code: SQL  [Auswählen]
    WHERE o.date_purchased > '2020-01-01 00:00:00' AND o.date_purchased < '2020-05-01 00:00:00');

    Gruß,
    noRiddleGruß,
    noRiddle

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Re: Abfrage nicht verkaufter Artikel im Zeitraum X
    Antwort #6 am: 06. Mai 2020, 12:50:58
    Du gibst die Uhrzeit mit an um mittels DATE() wieder auf lediglich das Datum zu reduzieren ?
    Macht nicht wirklich Sinn.
    Ahhh. Ok. Klingt logisch.

    Wenn man sicher gehen möchte, daß BETWEEN bei datetime-Feldern auch richtig funktioniert, kann  man statt dessen auch das machen:
    Code: SQL  [Auswählen]
    WHERE o.date_purchased > '2020-01-01 00:00:00' AND o.date_purchased < '2020-05-01 00:00:00');
    Funktioniert BETWEEN manchmal nicht richtig? Oder interpretiert BETWEEN etwas anders?

    Doppelgrüße zurück  ;-)

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Re: Abfrage nicht verkaufter Artikel im Zeitraum X
    Antwort #7 am: 06. Mai 2020, 13:10:05
    "Doppelgrüße":
    Upps, habe ich wohl beim drücken meiner F-Taste gezittert.

    "BETWEEN auf bei datetime-Feldern":
    Weiß ich ehrlichgesagt nicht genau., datetime ist ja nicht direkt eine Zahl. Aber wenn > und < geht sollte auch BETWEEN gehen.

    So etwas kann einem aber sicher immer die Suchmaschine des Vertrauens beantworten.

    Gruß,
    noRiddle
    2 Antworten
    853 Aufrufe
    06. Januar 2022, 07:47:25 von halunke
    16 Antworten
    7292 Aufrufe
    18. November 2009, 11:03:48 von Tomcraft