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: SQL Befehl für Preisupdate der Kundengruppen

    Schreinermeister

    • Fördermitglied
    • Beiträge: 415
    • Geschlecht:
    SQL Befehl für Preisupdate der Kundengruppen
    am: 09. April 2022, 21:10:24
    Hallo zusammen,

    ich versuche gerade die Daten meiner Preiskalkulation unter Excel per SQL in die DB zu transferieren,

    Bei der product_price ist das ganze noch rel. einfach.

    Bei der personal_offers_by_customers_status_1 ist das um einiges schwieriger.

    Wie geht man da vor?

    Alle Einträge der entsprechenden products_id löschen und neue Einträge einlesen?

    Gruß Chris.

    Linkback: https://www.modified-shop.org/forum/index.php?topic=42329.0
    rechtstexte für onlineshop

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.306
    • Geschlecht:
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #1 am: 14. April 2022, 20:43:55
    Was willst du erreichen ?

    Gruß Gerhard

    Schreinermeister

    • Fördermitglied
    • Beiträge: 415
    • Geschlecht:
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #2 am: 15. April 2022, 08:45:23
    Hallo Gerhard,

    ich hab mir über Jahre eine Preiskalkulation und Lagerverwaltung in Excel gebastelt.
    Wenn sich nun der Herstellerpreis ändert wollte ich die neuen Verkaufspreise eines einzelnen Artikels per SQL in die DB updaten.

    Vor allem die Staffelpreise in der personal_offers_by_customers_status_1 stellen mich da vor, für mich, unlösbare Probleme.

    Wird die price_id automatisch gesetz?
    Wie lösche ich die vorhandenen Werte des Artikels. (Vermutlich über die products_id, diese hab ich aber nicht in der Excel-Liste und müsste diese erst über die Tabelle products anhand von products_model auslesen)
    Wie schreibe ich die neuen Werte in die DB?

    Gruß Chris

    GTB

    • modified Team
    • Gravatar
    • Beiträge: 6.306
    • Geschlecht:
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #3 am: 15. April 2022, 11:56:24
    Die Werte löschen funktioniert noch über einen SQL anhand der Artikelnummer. Einfügen geht aber nicht mehr ohne.

    Pflege dir die products_id in deiner Excel nach.

    Die price_id ist ein autoincrement Wert und musst du nicht angeben.

    Gruß Gerhard

    Q

    • Fördermitglied
    • Beiträge: 1.535
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #4 am: 15. April 2022, 14:46:16
    Wenn die Artikel schon in der personal_offers....  drin sind, dürfte das doch mit einem Sub-Selection im WHERE auch mit products_model gehen?

    Allgemein: SQL UPDATE Statement

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.989
    • Geschlecht:
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #5 am: 15. April 2022, 16:12:19
    @Schreinermeister
    Willst du das automatisieren ?
    Ein Tabellenkalkulations-Sheet ist ja immer auch als CSV-Datei abspeicherbar (ob Excel, OpenOffice.calc oder LibreOffice.calc)
    und eine CSV-Datei könnte man mittels eines kleinen Skriptes automatisiert einlesen und die Daten in die DB verteilen.
    Dafür würde es helfen und die Sache vereinfachen wenn die Felder/Spalten in dem Sheet genauso benannt sind wie in der DB.
    Theoretisch, wenn der Aufbau des Sheets stimmt, ginge das sogar mttels der shop-eigenen Import-Funktion.

    Gib mal ein paar Zeilen aus einer deiner Excel-Dateien als Beispiel, dann können wir dir ein paar Tipps geben.
    Tipps, damit du es selbst veruchen kannst umzusetzen, denn dir hier ein fertiges Skript zur Verfügung zu stellen würde den Support im Rahmen des Forums sprengen.

    Gruß,
    noRiddle

    Schreinermeister

    • Fördermitglied
    • Beiträge: 415
    • Geschlecht:
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #6 am: 15. April 2022, 18:10:44
    Hallo zusammen,

    danke für die schnellen Rückmeldungen.

    Kann die products_id nicht anhand von products_model aus der products Tabelle ausgelesen werden?

    @ noRiddle
    automatisieren wäre natürlich eine Option. Da es sich aber meist nur um einen einzelnen Artikel handelt ist meiner Ansicht nach das erstellen einer CSV-Datei dafür zu umständlich.

    Die Spaltenbeschriftungen kann ich ja in einem speziellen Sheet dafür frei wählen.
    Ein denkbarer Aufbau der Spalten wäre aktuell.

    products_model   |   Standardpreis   |   Menge Staffel1   |   Preis Staffel1   |   Menge Staffel2   usw. bis zu max. 4 Staffelpreise

    wobei manche Artikel keine Staffelpreise haben, andere 2, 3 oder 4 Staffelungen.

    Gruß Chris

    Q

    • Fördermitglied
    • Beiträge: 1.535
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #7 am: 15. April 2022, 21:27:24
    Kann die products_id nicht anhand von products_model aus der products Tabelle ausgelesen werden?

    Wenn die Artikel schon in der personal_offers....  drin sind, dürfte das doch mit einem Sub-Selection im WHERE auch mit products_model gehen?

    Ich hab es gerade mal getestet.

    Code: SQL  [Auswählen]
    UPDATE personal_offers_by_customers_status_1 SET personal_offer = 1.23 WHERE products_id = (SELECT products_id FROM products WHERE products_model = 'DerBesteArtikel007');

    Wenn es den Artikel in der personal_offers_by_customers_status_x noch nicht gibt, muss man halt mit INSERT arbeiten (Bsp. für den selben Artikel mit zwei Einträgen für Stk=1 und Stk=10:
    Code: SQL  [Auswählen]
    INSERT INTO personal_offers_by_customers_status_1 (products_id, quantity, personal_offer)
    VALUES ((SELECT products_id FROM products WHERE products_model = 'GeilerScheissXXL'),1,2.22);
    INSERT INTO personal_offers_by_customers_status_1 (products_id, quantity, personal_offer)
    VALUES ((SELECT products_id FROM products WHERE products_model = 'GeilerScheissXXL'),10,2.00);

    Preise = netto!!! Wie immer in der DB, außer bei Versandkosten, da nicht immer  ;-).

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.989
    • Geschlecht:
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #8 am: 15. April 2022, 23:38:49
    Ja, wenn es sich immer um wenige oder gar lediglich einen Artikel handelt kann man es so machen wie oneQ schreibt.
    Allerdings muß bei der ersten Query in die WHERE-Clause noch die quantity, da es ja Staffelpreise gibt.

    Ein UPDATE geht auch mit einem JOIN anstelle eines Sub-Selects.
    Am Beispiel oneQs:
    Code: SQL  [Auswählen]
    UPDATE personal_offers_by_customers_status_X pobcs
      JOIN products p
        ON p.products_id = pobcs.products_id
       SET personal_offer = 1.23
     WHERE p.products_model = 'DerBesteArtikel007'
       AND pobcs.quantity = 1;

    Wenn man auf products_id, quantity einen unique Index setzen würde könnte man sogar immer ein INSERT machen, mit
    ON DUPLICATE KEY UPDATE.
    Man muß nur aufpassen, daß man das auch für alle Kundengruppen macht die vom Eckpreis (in der Tabelle products) abweichende Preise haben sollen.

    Wenn man ein wenig mit Formeln in Excel umgehen kann kann man sich die Befehle sogar automatisch generieren lassen und braucht sie nur noch in phpMyAdmin (oder was immer man für ein Tool hat) abzusetzen.

    Gruß,
    noRiddle

    Q

    • Fördermitglied
    • Beiträge: 1.535
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #9 am: 15. April 2022, 23:49:49
    8-) danke noRiddle. Wieder was gelernt. Dachte UPDATE und JOIN mögen sich nicht, aber so kann man ja theoretisch sogar in mehreren Tabellen gleichzeitig Werte ändern......

    Die Anzahl der Staffel beim ersten Bsp wollte ich eigentlich noch ergänzt haben, war da aber wohl mit Bsp 2 abgelenkt  :whistle:

    @Excel: "&" ist dein Freund: Kombinieren von Daten

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.989
    • Geschlecht:
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #10 am: 15. April 2022, 23:54:16
    ... so kann man ja theoretisch sogar in mehreren Tabellen gleichzeitig Werte ändern......
    ...

    Wie das ?

    Gruß,
    noRiddle

    Q

    • Fördermitglied
    • Beiträge: 1.535
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #11 am: 16. April 2022, 00:19:53
    Nicht?

    Muss ich dann wohl mal testen. Dachte an sowas wie
    Code: SQL  [Auswählen]
    UPDATE tab1
    JOIN tab2 ON ....
    SET tab1.Spalte1 = 10,
    tab2.Spalte5 = 20
    WHERE ...

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.989
    • Geschlecht:
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #12 am: 16. April 2022, 00:35:42
    Nee, so geht das nicht.
    Man kann zwar im SET-Teil kommagetrennt mehrere Felder updaten, aber nur in ein und derselben Tabelle, also in deinem Beispiel tab1, und in ein und derselben Row/Zeile, wegen des WHERE.

    Gruß,
    noRiddle

    *NACHTRAG*
    Ach, und, um bei der ursprünglichen Sache zu bleiben:
    Ob ein UPDATE mit JOIN oder mit Sub-Select schneller ist als das andere weiß ich nicht, wäre zu prüfen.

    Schreinermeister

    • Fördermitglied
    • Beiträge: 415
    • Geschlecht:
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #13 am: 23. Juli 2022, 10:51:20
    Hallo zusammen,

    ich bin heute mal dazugekommen an dem Preisupdate weiterzubasteln.

    Danke schon mal für die Unterstützung.

    Vorab: ich nutze nur die personal_offers_by_custumers_status_1 und möchte nur die Preise vob einzelnen Artikeln anpassen.

    Ich stell mit gerade die Frage ob das mit dem UPDATE überhaupt funktioniert.

    Nehmen wir mal folgendes an.

    Aktuell in der DB
    products_id :  7084      quantity : 1       personal_offer : 1,1000
    products_id :  7084      quantity : 5      personal_offer : 1,0000
    products_id :  7084      quantity : 10     personal_offer : 0,9000

    --------

    Nun soll z.B. folgendes rein
    products_id :  7084      quantity : 1       personal_offer : 1,1500
    products_id :  7084      quantity : 8      personal_offer : 1,0000

    --------
    soweit ich das einschätzen kann wäre es doch einfacher alle Einträge der products_id :  7084 (products_model = ‘9072537‘) aus der Tabelle zu löschen und die neuen dann einzufügen.  ODER ?

    Ich hab mir folgendes zusammengereimt
    Zuerst den Preis in der products anpassen.
    Code: PHP  [Auswählen]
    UPDATE products SET products_price = 1.15 WHERE products_model ='9072537';

    Dann die Einträge zum Artikel 9072537 aus der personal_offers_by_customers_status_1 löschen
    Code: PHP  [Auswählen]
    DELETE FROM personal_offers_by_customers_status_1 pobcs
    JOIN products p
    ON p.products_id = pobcs.products_id
    WHERE p.products_model =9072537;

    Dann die neuen Werte zu Artikel 9072537 in die personal_offers_by_customers_status_1 eintragen
    Code: PHP  [Auswählen]
    INSERT INTO personal_offers_by_customers_status_1 (products_id, quantity, personal_offer)
    VALUES ((SELECT products_id FROM products WHERE products_model = '9072537'),1,1.15);
    INSERT INTO personal_offers_by_customers_status_1 (products_id, quantity, personal_offer)
    VALUES ((SELECT products_id FROM products WHERE products_model = '9072537'),8,1.00);

    Ich stelle die Befehle in LibreOffice (hab da meine Preiskalkulation) zusammen (nutze dafür VERKETTEN) und lasse diese in die Zwischenablage kopieren.

    Ich hab von SQL keine Ahnung, daher wäre ich dankbar wenn sich einer der Wissenden das mal anschaut bevor ich das nutze.

    Gruß Chris.

    Q

    • Fördermitglied
    • Beiträge: 1.535
    Re: SQL Befehl für Preisupdate der Kundengruppen
    Antwort #14 am: 23. Juli 2022, 11:42:21
    Der Code ist SQL und nicht PHP  ;-)

    Code: SQL  [Auswählen]
    INSERT INTO tbl_name (a,b,c)
        VALUES(1,2,3), (4,5,6), (7,8,9);
     
    Wäre auch möglich. Nur nice to know.

    Mit einer Tabellenkalkulation ist das mit INSERT pro Zeile wohl einfacher  :nixweiss:

    Und dann einfach mal an einem Produkt testen und schauen ob es passt oder ggf Fehler wirft.  So lernt man am besten  :-D

    Sieht aber erstmal gut aus. Kann es gerade selber nicht testen.
    3 Antworten
    3280 Aufrufe
    01. Januar 2016, 13:29:01 von Herr_Bert
    1 Antworten
    2405 Aufrufe
    09. September 2009, 08:16:02 von web28
    2 Antworten
    2609 Aufrufe
    20. Dezember 2011, 14:26:07 von Pelegrino
    6 Antworten
    4445 Aufrufe
    27. Oktober 2010, 11:11:54 von Tigerzivi