Inaktive Artikel löschen per SQL

Hallo Oxid Gemeinde,

ich würde gerne immer mal wieder inaktive Artikel per SQL Statment aus dem Shop löschen, könntet ihr mir das passende Statment dazu sagen.

Viele Grüße

Jürgen

http://www.intertoy24.com

DELETE FROM oxarticles WHERE oxactive = 0

Das geht nicht so einfach per SQL, da die Artikel in diversen anderen Tabellen referenziert sein können (Bestellungen, Kategoriezuordnungen, Rabatte, etc.). Man muss also aufpassen, dass man beim Löschen per SQL keine “Leichen” hinterlässt. Im besten Fall verschwendet man damit zwar nur etwas Performance. Im umgünstigeren Fall geistern diese Leichen aber auch weiter durch den Shop.

Prinzipiell könnte man mit diesem Statement inaktive Artikel löschen.

DELETE FROM oxarticles WHERE oxactive = 0

Es werden dabei aber keine Informationen aus referenzierten Tabellen gelöscht.

Wenn man alle referenzierten Informationen löschen will, wird das ein komplexeres SQL-Script.

Auf jeden Fall vorher ein Backup machen -> Bei DELETE wird es sonst unangenehm;)

Das ganze auf mehrere Tabellen auszuweiten ist aber nur ein kleinerer Akt.

Bsp: Löschen von Artikel und langer Beschreibung in 2 Tabellen.

delete oxarticles,oxartextends from oxarticles,oxartextends where oxarticles.oxactive  = 0 and oxarticles.oxid=oxartextends.oxid

Hast Du eventuell ein SQL-Script welches Artikel sauber mit allen referenzierten Tabellen aus der DB löscht und möchtest es mit der Welt teilen?

Nein, habe ich noch nicht gebraucht. Das obige kann man aber auch noch erweitern :wink:

Hallo,
So ein Artikel kann in vielen Tabellen vorhanden bzw. verlinkt sein, auf Anhieb fallen mir da folgende ein:
oxarticles
oxartextends
oxseo
oxobject2seodata
oxobject2catagory
oxseohistory
oxobject2attribute
oxobject2selectlist
oxactions2article
oxaccesoire2article

in oxorderarticles kann die Verlinkung ruhig drin bleiben, schließlich soll ja in einem halben Jahr noch sichtbar sein was Kunde x erworben hat.

>>Das ganze auf mehrere Tabellen auszuweiten ist aber nur ein kleinerer Akt.
aber viel schriebarbeit.

Wahrscheinlich sollen die Bilder auch raus fliegen?

Wenn die Aktion öfters durchgeführt werden soll, auch mit anderen Bedingungen hilft vllt dies http://www.oxidmodule.com/OXID-Professional-4/Module-PE4/Artikel-loeschen-PE4.html. Entfernt die Artikel im Shop-Kontext also auch die entsprechenden Einträge verstreut in den Tabellen, + der Bilder.

ceau

Das sollte jeder jetzt für sich erweitern können :wink:

DELETE oxarticles, oxartextends, oxseo, oxobject2seodata FROM oxarticles INNER JOIN oxartextends INNER JOIN oxseo INNER JOIN oxobject2seodata WHERE oxarticles.oxactive  = 0 AND oxarticles.oxid=oxartextends.oxid AND oxarticles.oxid=oxseo.oxobjectid AND oxarticles.oxid=oxobject2seodata.oxobjectid