Anleitung Hilfreiche SQL-Befehle

Thema wurde von Petra, 28. April 2015 erstellt.

  1. M. Zitzmann

    M. Zitzmann Erfahrener Benutzer

    Registriert seit:
    3. März 2016
    Beiträge:
    387
    Danke erhalten:
    127
    Danke vergeben:
    41
    Soll der Rabatt als Sonderangebot oder nur im Artikel als Maximalrabatt eingetragen werden?
     
  2. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    30. Juni 2017
    Beiträge:
    459
    Danke erhalten:
    52
    Danke vergeben:
    75
    Nein, nur im Artikel. Habe mir aber schon ein fertiges Skript programmieren lassen, was das macht. Ebenso kann ich Artikel jetzt an einer hochgeladenen CSV gesondert rabattiert updaten. Funktioniert alles bestens und ich muss wöchentlich keine 1500 Artikel manuell updaten.
     
  3. Anonymous

    Anonymous Beta-Held

    Registriert seit:
    6. September 2011
    Beiträge:
    1.943
    Danke erhalten:
    466
    Danke vergeben:
    449
    #563 Anonymous, 1. November 2023
    Zuletzt bearbeitet: 7. November 2023
    Hallo Zusammen,
    da man ja per CSV nicht die Artikelanzahl der "Zusatzoptionen" bearbeiten kann, Frage ich euch ob jemand evtl. einen SQL-Befehl dafür gibt!?
    Ich möchte den Bestand der Zusatzoptionen bei allen Artikeln auf eine Anzahl ändern.
    Danke vorab!
    LG Bernd

    LÖSUNG:

    UPDATE products_attributes SET attributes_stock = 99;
    (Ersetze den Wert 99 mit dem von dir gewünschten Wert.)
     
  4. tannenhof_imshausen

    tannenhof_imshausen Erfahrener Benutzer

    Registriert seit:
    26. Oktober 2022
    Beiträge:
    86
    Danke erhalten:
    20
    Danke vergeben:
    40
    Der Lagerbestand von Zusatzoptionen wird in der Spalte attributes_stock in der Tabelle products_attributes gespeichert.

    Folgender SQL-Befehl listet z.B. alle Produkte auf, bei denen die Summe von den zwei zugewiesenen Options-Lagerbeständen nicht mit dem Haupt-Lagerbestand übereinstimmt:

    PHP:
    SELECT
        p
    .products_id,
        
    pd.products_name AS Bezeichnung,
        
    products_quantity AS Lagerbestand,
        (
    SELECT
                attributes_stock
            FROM
                products_attributes 
    AS pa
            WHERE
                p
    .products_id pa.products_id
                    
    AND pa.options_id 4
                    
    AND pa.options_values_id 25) AS Lagerbestand_Option_25,
        (
    SELECT
                attributes_stock
            FROM
                products_attributes 
    AS pa
            WHERE
                p
    .products_id pa.products_id
                    
    AND pa.options_id 4
                    
    AND pa.options_values_id 26) AS Lagerbestand_Option_26
    FROM
        products 
    AS p
            INNER JOIN
        products_description 
    AS pd ON p.products_id pd.products_id
    WHERE
        pd
    .language_id 2
            
    AND p.products_id IN (SELECT DISTINCT
                products_id
            FROM
                products_attributes
    )
            AND 
    products_quantity <> (SELECT
                attributes_stock
            FROM
                products_attributes 
    AS pa
            WHERE
                p
    .products_id pa.products_id
                    
    AND pa.options_id 4
                    
    AND pa.options_values_id 25) + (SELECT
                attributes_stock
            FROM
                products_attributes 
    AS pa
            WHERE
                p
    .products_id pa.products_id
                    
    AND pa.options_id 4
                    
    AND pa.options_values_id 26)
    Der zugehörige Optionsname steht in der Spalte products_options_values_name in der Tabelle products_options_values. Weiß jemand, wie ich diesen Wert (also z.B.
    PHP:
    SELECT products_options_values_nameproducts_attributes FROM products_options_values where products_options_values_id=25
    als Spaltennamen setzen kann? Also so was wie
    CONCAT('Lagerbestand ',SELECT products_options_values_nameproducts_attributes FROM products_options_values where products_options_values_id=25)
    , aber eben nach dem AS.


    Der Bestand von Varianten steht in der Spalte combi_quantity in der Tabelle products_properties_combis.
     
  5. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    17. Oktober 2018
    Beiträge:
    140
    Danke erhalten:
    78
    Danke vergeben:
    18
    #565 Anonymous, 8. Januar 2024
    Zuletzt bearbeitet: 15. Januar 2024
    An anderer Stelle wurde nach einer Möglichkeit gefragt, wie man an die Umsätze mit einem bestimmten Rabatt Coupon kommen kann. https://www.gambio.de/forum/threads/gutscheincode-auswerten.46804/

    -- Edit: Der nachfolgende Abschnitt wurde überarbeitet (2024-Jan-15 00:11); Erklärung siehe unten.

    Die SQL-Abfrage liefert zu einem (per id) angegebenen Rabatt Coupon zu allen Aufträgen, bei welchen der Coupon eingelöst worden ist, alle gespeicherten Werte für den jeweiligen Auftrag aus der Summentabelle orders_total. Darin stehen auftragsbezogen die einzelnen Werte für die jeweiligen Module, wie sie zur Zeit des Bestelleingangs unter Modulcenter > Zusammenfassung: Zusammenfassung eingestellt waren und bei der Gesamtsummenbildung des Auftrags berücksichtigt wurden. Die Werte der Spalte Summentyp entsprechen dabei den Modulnamen. So steht z.B. ot_subtotal für Warenwert und ot_total für Summe.

    Der jeweilige Rabatt Coupon wird in der Abfrage durch seine Id angegeben, die ist eindeutig. Ihr findet Sie, wenn ihr einen Rabatt Code im Backend zum Bearbeiten ausgewählt habt, in der grauen Spalte rechts oben vor dem Namen des Coupons in eckigen Klammern stehend.

    Das Abfrageergebnis beinhaltet die Spalten mit Kundennummer, Bestellnummer, Einlösedatum, Summentyp und Wert (value), wobei letztere mit '.' als Dezimaltrennzeichen und 4 Nachkommastellen kommt (ist so in der DB abgelegt). Außerdem noch die mit Kundennamen, Erläuterungen (title) des Summentyps, sowie den formatierten Summenwerten (text).

    In der nachfolgenden Beispielabfrage werden alle Werte für jeden Auftrag ausgegeben, in welchem der Rabatt Coupon mit Id 3 verwendet wurde. Ihr müsst für Eure Abfrage also den Wert für v.coupon_id entsprechend anpassen.

    Code:
    SELECT
            v.customer_id AS "Kunde Nr.",
            v.order_id AS "Bestellung Nr.",
            v.redeem_date AS "Einlösedatum",
            ot.value,
            ot.class AS "Summentyp",
            o.customers_name AS "Kunde Name",
            ot.title,
            ot.text
    FROM coupon_redeem_track v
    INNER JOIN orders o ON v.order_id = o.orders_id
    INNER JOIN orders_total ot ON v.order_id = ot.orders_id
    WHERE v.coupon_id = 3 -- <-- hier Id des Rabatt Coupons angeben
    ;
    Als Variante davon gibt es die folgende Abfrage, bei der direkt die Summe aller Werte zurückgegeben wird (mit 2 Dezimalstellen). Welche Werte dabei aufsummiert werden sollen, muss hierbei in der Abfrage angegeben werden.

    In der nachfolgenden Beispielabfrage werden die Werte des Summentyps "ot_subtotal" (was für den Warenwert steht) für alle Aufträge, in welchem der Rabatt Coupon mit Id 3 verwendet wurde, aufsummiert.

    Code:
    SELECT FORMAT(SUM(ot.value), 2)
    FROM coupon_redeem_track v
    INNER JOIN orders o ON v.order_id = o.orders_id
    INNER JOIN orders_total ot ON v.order_id = ot.orders_id
    WHERE
            v.coupon_id = 3 AND -- <-- hier Id des Rabatt Coupons angeben
            ot.class =  "ot_subtotal"  -- <-- hier Summentyp (class) angeben
    ;
    Die Abfragen wurden in Toolbox > SQL im phpMiniAdmin erfolgreich ausgeführt unter v4.8.0.2.

    Fragen, Anmerkungen, Verbesserungen und Ergänzungen dazu sind erwünscht.

    --

    Der nach der "Edit-Markierung" oben folgende Teil dieses Posting wurde grundlegend überarbeitet. Die bisherige Version war zu spezifisch und hatte für den Fragenden nicht funktioniert. Zusammen haben wir dann eine Lösung entwickelt, die ich jetzt hier beschrieben habe. Ich wollte in diesem Thread kein neues Posting mit einer überarbeiteten Version machen, da ich den Thread rein als Sammlung hilfreicher funtionierender SQL-Abfragen betrachte und hier keinen diskutierten Weg der Lösungsfindung dokumentieren möchte.
     
  6. marcel_halbich

    marcel_halbich Erfahrener Benutzer

    Registriert seit:
    30. April 2017
    Beiträge:
    222
    Danke erhalten:
    11
    Danke vergeben:
    46
    Hallo, ein Königreich für einen SQL Befehl, mit dem ich in bestimmten Kategorien die VPE auf "Liter" (oder "l") setzen kann und die Mengeneinheit auf "ml".
    Wir verkaufen eine Menge Farben und aus unerfindlichen Gründen war nach dem Update alles auf 100ml statt Liter gesetzt und die Mengeneinheit leer.
     
  7. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    18. August 2021
    Beiträge:
    653
    Danke erhalten:
    91
    Danke vergeben:
    266
    #567 Anonymous, 5. April 2024
    Zuletzt bearbeitet: 5. April 2024
    Hallo,

    die folgende SQL Anweisung gibt mir zwei unterschiedliche Ergebnisse aus.
    Code:
    SELECT products.products_id,
    products.products_model,
    products_description.products_name,
    products_item_codes.brand_name,
    products.products_quantity,
    products_item_codes.google_export_availability_id
    FROM products
    
    INNER JOIN products_item_codes
    ON products_item_codes.products_id = products.products_id
    
    INNER JOIN products_description
    ON products_description.products_id = products.products_id
    
    WHERE products.products_quantity = 0
    AND products_item_codes.google_export_availability_id = 1;
    
    
    Ich bekomme die zwei Resultate geliefert, möchte aber nur eins:

    Array
    (
    [products_id] => 436
    [products_model] => 00355
    [products_name] =>
    [brand_name] => Bijou Brigitte
    [products_quantity] => 0.0000
    [google_export_availability_id] => 1
    )

    Array
    (
    [products_id] => 436
    [products_model] => 00355
    [products_name] => Drahtkette Viereck gewellt 45cm
    [brand_name] => Bijou Brigitte
    [products_quantity] => 0.0000
    [google_export_availability_id] => 1
    )

    Beim ersten Ergebnis ist [products_model] => leer
    Das zweite Ergebnis ist das Resultat, was ich gerne hätte.

    Kann mir da jemand unter die Arme greifen?

    Vielen Dank
     
  8. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    18. August 2021
    Beiträge:
    653
    Danke erhalten:
    91
    Danke vergeben:
    266
    language_id hat gefehlt
     
  9. Dirk Meyer

    Dirk Meyer Mitglied

    Registriert seit:
    22. September 2011
    Beiträge:
    10
    Danke erhalten:
    0
    Danke vergeben:
    1
    Hallo Zusammen,
    ich bin auf der Suche nach einem SQL Befehl um alle "Zusatzbegriffe für Suche" zu löschen.
    Jemand eine Idee?
    Danke im Vorraus!
     
  10. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.783
    Danke erhalten:
    942
    Danke vergeben:
    303
    Damit sollte es gehen:
    Code:
    UPDATE products_description SET products_description.products_keywords = "";
    
    Vorher Daten sichern!
     
  11. Dirk Meyer

    Dirk Meyer Mitglied

    Registriert seit:
    22. September 2011
    Beiträge:
    10
    Danke erhalten:
    0
    Danke vergeben:
    1
    ...das ging ja Fix! Danke!!!
     
  12. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    18. Juli 2019
    Beiträge:
    594
    Danke erhalten:
    136
    Danke vergeben:
    37
    Gibt es eine Möglichkeit per SQL das Feld "Marke" mit dem Inhalt des Felds "Hersteller" zu besetzen?
    Ich habe leider immer nur den Hersteller erfasst, Google greift aber auf die Marke zu,
    Das ist bei mir das Selbe, daher würde ich das gerne von Hersteller in Marke kopieren.

    Marke ist brand_name in products_item_codes
     
  13. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    Registriert seit:
    22. Januar 2014
    Beiträge:
    524
    Danke erhalten:
    46
    Danke vergeben:
    59
    das sollte gehen...was steht in feld marke wenn man manuell einen setzt? ziemlich sicher hersteller id aus gambio. bitte in phpmyadmin checken. kann dann einen befehl erarbeiten der die felder setzt.
     
  14. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    18. Juli 2019
    Beiträge:
    594
    Danke erhalten:
    136
    Danke vergeben:
    37
    Da steht Text drin, keine ID. Man müsste also für jeden Artikel den Text aus dem Herstellerfeld nehmen, und diesen in das Feld Marke kopieren.
     
  15. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    Registriert seit:
    22. Januar 2014
    Beiträge:
    524
    Danke erhalten:
    46
    Danke vergeben:
    59
    der hersteller hat aber im feld eine id, keinen text. id muss man klartext hersteller aus anderer tabelle ziehen. kann man alles entwickeln. da das aber den thread hier nicht weiterbringt am besten direkte anfrage an ff-webdesigner.com
     
  16. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    18. August 2021
    Beiträge:
    653
    Danke erhalten:
    91
    Danke vergeben:
    266
    Hallo,

    ich mache eine SQL Abfrage.

    ... AND products_description LIKE '%<p>Das ist Text%';

    Der Text "<p>Das ist Text" steht aber unterschiedlich in der DatenBank.

    Nämlich so:

    "<p> Das ist Text"
    "<p> Das ist Text"
    "<p> Das ist Text"

    Man könnte dann so Abfragen:

    SELECT... AND products_description LIKE '%<p>_Das ist Text%';
    SELECT... AND products_description LIKE '%<p>__Das ist Text%';
    SELECT... AND products_description LIKE '%<p>___Das ist Text%';

    Also mit ein, zwei oder drei Platzhaltern, das wären dann drei Abfragen.

    Gibt es nicht die Möglichkeit, mit einer Abfrage alle drei Möglichkeiten abzudecken. Das heißt, mit einer Abfrage alle Leerzeichen abzufangen, egal, wie viele es sind?

    Viele Grüße

    Bernd
     
  17. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    1.180
    Danke erhalten:
    1.062
    Danke vergeben:
    368
    Code:
    SELECT * FROM `products_description` WHERE `products_description` REGEXP '.*<p> *Das ist Text.*';
     
  18. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    18. August 2021
    Beiträge:
    653
    Danke erhalten:
    91
    Danke vergeben:
    266
  19. zuendappdienst

    zuendappdienst Mitglied

    Registriert seit:
    8. Februar 2018
    Beiträge:
    13
    Danke erhalten:
    2
    Danke vergeben:
    1
    Hallo, gibt es einen SQL Befehl das ich alle Artikel auf nicht käuflich setzen kann ?

    Vielen Dank
     
  20. Kai Stejuhn

    Kai Stejuhn Beta-Held

    Registriert seit:
    26. September 2014
    Beiträge:
    1.424
    Danke erhalten:
    720
    Danke vergeben:
    92
    Sollte mit

    Code:
    UPDATE `products` SET `gm_price_status`='2'
    funktionieren.

    Datenbank vorher sichern, Benutzung auf eigene Gefahr.