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: Zollinfos in Datenbank einfügen

    Viol

    • Fördermitglied
    • Beiträge: 2.209
    SQL: Zollinfos in Datenbank einfügen
    am: 17. März 2023, 10:50:00
    Hallo,
    ich bin gerade dabei, in meinem Testshop(2.0.6.0) per sql die Zollinformationen in den Spalten products_weight,  products_origin,  products_tariff und products_tariff_title zu befüllen. Das klappt im Prinzip auch ganz gut. Nur bekomme ich nach dem
    Code: SQL  [Auswählen]
    UPDATE products
    SET products_tariff_title = (
      SELECT products_name
      FROM products_description
      WHERE products_description.language_id = 1
      AND products_description.products_id = products.products_id
    );
    Bei etlichen Artikeln wird auch ein Eintrag angelegt, es kommt aber
    der Fehler: #1048 - Feld 'products_tariff_title' darf nicht NULL sein
    Gebe ich darauf hin:
    Code: SQL  [Auswählen]
    SELECT * FROM products WHERE products_tariff_title IS NULL;
    kommt  MySQL lieferte ein leeres Resultat zurück (d.h. null Datensätze). (Die Abfrage dauerte 0.0006 Sekunden.)
    Widerspricht sich doch eigentlich?

    Linkback: https://www.modified-shop.org/forum/index.php?topic=42878.0
    Marktplatz - Eine große Auswahl an neuen und hilfreichen Modulen sowie modernen Templates für die modified eCommerce Shopsoftware

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.748
    • Geschlecht:
    Re: SQL: Zollinfos in Datenbank einfügen
    Antwort #1 am: 17. März 2023, 11:03:10
    Ohne zu wissen was das genau für Felder sind:
    Warum widerspricht sich das ?
    Die MySQL-Meldung sagt ja gerade, daß das Feld nicht NULL sein darf und hat folglich auch deinen Befehl nicht ausgeführt.
    Und wenn das Feld nicht NULL sein darf warum meinst du Einträge die NULL als Wert haben zu finden ?

    Der Befehl selbst ist mir außerdem unverständlich.
    Was du möchtest ist vielleicht eher das ?
    Code: SQL  [Auswählen]
    UPDATE products p
      JOIN products_description pd
        ON pd.products_id = p.products_id
       AND pd.language_id = 1
       SET p.products_tariff_title = pd.products_name

    Gruß,
    noRiddle

    Viol

    • Fördermitglied
    • Beiträge: 2.209
    Re: SQL: Zollinfos in Datenbank einfügen
    Antwort #2 am: 17. März 2023, 11:19:49
    Die Spalten in der Tabelle products products_origin,  products_tariff und products_tariff_title werden von dem Modul "Zoll" eingerichtet, damit man mit dem MODUL: DHL Versand & Label-Erstellung die Angaben, die man für die Zollinhaltserklärung benötigt, zur Verfügung hat. Die Diskussion hatten wir einmal in dem dazugehörigen Modulthread. (https://www.modified-shop.org/forum/index.php?topic=42020.msg388503#msg388503)
    Ich möchte mit dem englischen Artikelnamen products_tariff_title befüllen. Das klappt mit dem oben beschriebenen Befehl trotz der Fehlermeldung bei mehr als 1000 Artikeln. Was ich herausgefunden habe, geht es bei den Artikeln, die ein / im Text haben, offenbar nicht (z.B. 3/4 oder 1/2).
    Weil es trotz der Fehlermeldung bei vielen Artikeln geklappt hat, war ich verwundert über die Fehlermeldung.

    EDIT: Mit Deinem SQL Befehl hat es tadellos funktoniert.  :thx: Was ist an meinem falsch?

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.748
    • Geschlecht:
    Re: SQL: Zollinfos in Datenbank einfügen
    Antwort #3 am: 17. März 2023, 12:39:25
    Ah, diese Diskussion war mir bereits entfallen.
    Ist das bei awids  untergegangen ?

    Deine Query:
    Mich wundert, daß diese Zeile in der Query interpretiert wird
    Code: SQL  [Auswählen]
    AND products_description.products_id = products.products_id

    da es doch keinerlei JOIN gibt.
    Wenn du sagts, daß es so geht scheint das DBMS das ja zu verstehen, kannte ich so nicht.
    Aus der Meldung
    #1048 - Feld 'products_tariff_title' darf nicht NULL sein
    habe ich außerdem geschlossen, daß das SELECT keinen Wert ergibt.

    Wieso es ein Problem bei einem / im Produktnamen gab ist mir auch nicht klar.

    Gruß,
    noRiddle

    Viol

    • Fördermitglied
    • Beiträge: 2.209
    Re: SQL: Zollinfos in Datenbank einfügen
    Antwort #4 am: 17. März 2023, 14:03:56

    Ist das bei awids  untergegangen ?
    Gruß,
    noRiddle
    Vermutlich leider ja.

    Ich habe es auch erreicht, dass in relevanten Katergorien die Zolltarifnummer eingefügt wurde. Der Befehl kommt mir nur ziemlich aufgebläht vor:
    Code: SQL  [Auswählen]
    UPDATE products
    SET products_tariff = '92093000'
    WHERE products_id IN (
        SELECT products_id
        FROM products_to_categories
        WHERE categories_id IN (7,8,251,9,84,10,147,159,175,166,165,161,167,295,224,15,17,12,29,204,207,260,200,202,287,11,394,13,16,67,120,68,224,295,67,16,13,394,11,68,120,228,231,228,231,127,236,243,244,112,59,110,182,181,) OR categories_id IN (
            SELECT categories_id
            FROM categories
            WHERE parent_id IN (0, 1, 2, 3, 109, 58, 180, 186,7,8,251,9,84,10,147,159,175,166,165,161,167,295,224,15,17,12,29,204,207,260,200,202,287,11,394,13,16,67,120,68,224,295,67,16,13,394,11,68,120,228,231,228,231,127,236,243,244,112,59,110,182,181)
        )
    )
    Die parent_id sind die "Oberkategorien", in denen sich weitere Kategorien befinden. (alle unter categories_id aufgeführte). Lasse ich aber die parent_id weg, werden nicht alle Artikel ausgefüllt , dazu muss ich, um alle relevanten Artikel mit der Zolltarifnummer zu füllen,  alle IDs der Katergieren bei  den parent_id einfügen.

    Viol

    • Fördermitglied
    • Beiträge: 2.209
    Re: SQL: Zollinfos in Datenbank einfügen
    Antwort #5 am: 20. März 2023, 16:22:01
    Hier mal meine weiteren (erfolgreichen)SQL Befehle, um die Zollinformationen über die Datenbank einzupflegen.
    Wichtig, wie immer, wenn Änderungen in der Datenbank gemacht werden, vorab eine Sicherung machen.
    Die Herkunft eines Produktes habe ich anhand der Hersteller durchgeführt.
    Also z. B.
    Code: SQL  [Auswählen]
    UPDATE products
    SET products_origin = 'AT'
    WHERE manufacturers_id = 21;

    Hat man mehrere Hersteller eines Landes;
    Code: SQL  [Auswählen]
    mehrere Hersteller :
    UPDATE products
    SET products_origin = 'DE'
    WHERE manufacturers_id IN (1, 29, 44);
     

    Zolltarifnummer:
    Code: SQL  [Auswählen]
    UPDATE products
    SET products_tariff = '12345678'
    WHERE products_id IN (
        SELECT products_id
        FROM products_to_categories
        WHERE categories_id IN (103) OR categories_id IN (
            SELECT categories_id
            FROM categories
            WHERE parent_id IN (103)
        )
    )
    Auch dabei kann man Kategorien ansprechen, einfach mit Komma getrennt weitere hinzufügen.
    Das Gewicht habe ich so festgelegt, da ich gleich schwere Artikel von verschiedenen Herstellern habe (ich verkaufe nichts für Autos ;-) nur als Beispiel:
    Code: SQL  [Auswählen]
    UPDATE products
    SET products_weight = 0.030
    WHERE products_weight = 0.0000
    AND EXISTS (
      SELECT * FROM products_description
      WHERE products_description.products_id = products.products_id
      AND (products_description.products_name LIKE '%Windshield wiper rubber%' OR products_description.products_name LIKE '%Scheibenwischergummi%')
      AND (products_description.products_name LIKE '%Vauxhall%' OR products_description.products_name LIKE '%Opel%')
    );

    Für den Inhalt derZollbeschreibung habe ich den englischen Artikelnamen genommen, da passt der Code von noRiddle perfekt:
    Code: SQL  [Auswählen]
    UPDATE products p
      JOIN products_description pd
        ON pd.products_id = p.products_id
       AND pd.language_id = 1
       SET p.products_tariff_title = pd.products_name
    Vielleicht können das andere auch brauchen, Verbesserungsvorschläge von Datenbankfachleuten sind sicher willkommen.
    0 Antworten
    968 Aufrufe
    11. April 2021, 11:56:35 von OMP24
    17 Antworten
    2671 Aufrufe
    26. Januar 2022, 14:30:56 von Tomcraft
    7 Antworten
    3049 Aufrufe
    19. Mai 2017, 17:01:49 von Herr_Bert