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: ANLEITUNG: Inaktive Artikel per SQL Befehl aus Datenbank löschen

    ds170477

    • Fördermitglied
    • Beiträge: 1.522
    • Geschlecht:
    Hallo zusammen,

    ich hab mein Artikelimport neu hochgeladen (vorher 54000 Artikel Aktiv)
    und nun werden rund 32000 Artikel Aber auf "inaktiv" gesetzt.

    Das ist auch gewollt, nur sehe ich Sie nicht in der Artikelübersicht im Backadmin- bereich.

    Ich möchte, die "inaktiven" Artikel komplett per SQL-Befehl löschen.

    Hat jemand ein Rat?

    Gruss

    Daniel

    [EDIT Tomcraft 03.06.2013: Hier geht es direkt zur Anleitung von vr.]

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

    ds170477

    • Fördermitglied
    • Beiträge: 1.522
    • Geschlecht:
    Also den Befehl zum Aktiveren sämtlicher Artikel, hab ich gefunden:

    UPDATE products SET products_status = 1

    Nur ein SQL GURU wird wohl, die inaktiven zu löschen..

    Gruss

    Daniel

    vr

    • modified Team
    • Beiträge: 2.664
    Hallo ds170477,

    nicht ganz einfach, zumindest wenn die DB aufgeräumt sein soll:

    Inaktive Artikel haben in Tabelle products den products_status = 0.

    Wenn Du die inaktiven Artikel komplett löschst, solltest Du auch die Einträge in den abhängigen Tabellen löschen. Alle Tabellen products_<xy> sind Kandidaten - auf jeden Fall, wenn ein Feld products_id vorkommt. Es gibt weitere Tabellen, die anders heissen, die ein Feld products_id haben, diese bekommst Du durch eine Abfrage einer MySQL-Systemtabelle in der DB information_schema:

    Code: SQL  [Auswählen]
    SELECT group_concat(TABLE_NAME) FROM COLUMNS
    WHERE column_name = 'products_id';

    ergibt: customers_basket,customers_basket_attributes,orders_products,
    personal_offers_by_customers_status_0,personal_offers_by_customers_status_1,
    personal_offers_by_customers_status_2,personal_offers_by_customers_status_3,
    personal_offers_by_customers_status_4,products,products_attributes,products_content,
    products_description,products_graduated_prices,products_images,products_notifications,
    products_to_categories,products_xsell,reviews,specials

    Ausserdem gibt es indirekte Abhängigkeiten, zb hat products_attributes Bezüge zu products_options und products_options_values. Wenn Optionen nur von gelöschten Artikeln benötigt wurden, können auch diese Optionen weg.

    Vorgehen:

    0. DB-backup

    1. Lösche zuerst alle abhängigen Sätze in allen betroffenen Tabellen

    2. Lösche erst ganz am Schluss die inaktiven Sätze in products, da Du sonst die Menge der zu löschenden Sätze nicht mehr ermitteln kannst:

    zu 1. zb

    Code: SQL  [Auswählen]
    DELETE FROM customers_basket WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM customers_basket_attributes WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM orders_products WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM personal_offers_by_customers_status_0 WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM personal_offers_by_customers_status_1 WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM personal_offers_by_customers_status_2 WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM personal_offers_by_customers_status_3 WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM personal_offers_by_customers_status_4 WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM products_attributes WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM products_content WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM products_description WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM products_description WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM products_graduated_prices WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM products_images WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM products_notifications WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM products_to_categories WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM products_xsell WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM reviews WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     
    DELETE FROM specials WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);

    zu 2.

    Code: SQL  [Auswählen]
    DELETE FROM products WHERE products_status = 0;

    Grüße, Volker

    ds170477

    • Fördermitglied
    • Beiträge: 1.522
    • Geschlecht:
    Habs gerade probiert, kriege folgende Fehlermeldung beim SQL Befehl:

    Fehler

    SQL-Befehl: Dokumentation

    SELECT group_concat( table_name )
    FROM COLUMNS
    WHERE column_name = 'products_id'

    MySQL meldet: Dokumentation
    #1146 - Table 'daschsql5.columns' doesn't exist

    Gruss

    Daniel

    vr

    • modified Team
    • Beiträge: 2.664
    Hallo Daniel,

    "... Abfrage einer MySQL-Systemtabelle in der DB information_schema:"

    Das ist *nicht* Deine shop-datenbank, sondern eine System-DB von MySQL. Gut möglich, dass Du die nicht direkt abfragen kannst, weil Du nicht die nötigen Rechte auf dem MySQL-Server hast. Brauchst Du aber auch nicht, denn die Abfrage sollte nur zeigen, wie die Liste der abhängigen Tabellen zustandekommt, das Ergebnis steht ja direkt darunter.

    Die anderen SQL-Statements beziehen sich auf Deine shop-Datenbank.

    Grüße, Volker

    ds170477

    • Fördermitglied
    • Beiträge: 1.522
    • Geschlecht:
    Hallo Volker,

    hat wunderbar geklappt :thx:

    Daniel

    Buggyboy

    • Fördermitglied
    • Beiträge: 968
    • Geschlecht:
    Re: ANLEITUNG: Inaktive Artikel per SQL Befehl aus Datenbank löschen
    Antwort #6 am: 24. September 2016, 11:06:06
    Moin!

    Hab mal eine Frage zu den Tabellen:
    Wenn ich alles wie von VR beschrieben löschen, dann sind auch alle Artikel aus den Kundenbestellungen raus.
    Wenn ich aber die Bestellungen so lassen möchte, welche Tabellen sind dann davon betroffen?

    Sprich, ich möchte nur alle inaktiven Artikel aus der DB raus haben.Allerdings sollen die Bestellungen und die Historie der Kunden davon nicht betroffen sein...
    Hoffe Ihr versteht was ich meine.... ;-}

    LG
    Peter

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: ANLEITUNG: Inaktive Artikel per SQL Befehl aus Datenbank löschen
    Antwort #7 am: 24. September 2016, 12:50:57
    Dann führe diesen Befehl nicht aus.

    Code: SQL  [Auswählen]
    DELETE FROM orders_products WHERE products_id IN
    (SELECT products_id FROM products WHERE products_status = 0);
     

    Gruss
    Hanspeter
    4 Antworten
    4348 Aufrufe
    28. April 2013, 08:39:47 von ShopNix
    13 Antworten
    11294 Aufrufe
    16. Mai 2013, 20:45:17 von web28
    4 Antworten
    13396 Aufrufe
    26. Januar 2017, 12:18:26 von Jonas
    17 Antworten
    13443 Aufrufe
    27. Oktober 2012, 16:37:31 von keineLustmehr
               
    anything