Alle:DELETE FROM oxuser WHERE oxid NOT IN ( SELECT oxuserid FROM oxorder)
Mit Einschränkung (Bsp: Datum): DELETE FROM oxuser WHERE oxid IN ( SELECT oxuserid FROM oxorder WHERE oxorderdate >= ‘2000-01-01 00:00:00′ AND oxorderdate <= ‘2014-10-22 14:04:19′)
Alles nach dem gleichen Schema, wobei 1. auch als erstes ausgeführt werden muss. Der Rest ist egal.
1. DELETE FROM oxuser WHERE oxid NOT IN ( SELECT oxuserid FROM oxorder)
2. DELETE FROM oxaddress WHERE oxuserid NOT IN ( SELECT oxid FROM oxuser)
3. DELETE FROM oxuserbasket WHERE oxuserid NOT IN ( SELECT oxid FROM oxuser)
4. DELETE FROM oxuserbasketitems WHERE oxbasketid NOT IN ( SELECT oxid FROM oxuserbasket)
Hier geht’s sicher um die DSGVO. Danach müssen Userdaten nach einer gewissen Zeit gelöscht werden, egal ob mit oder ohne Passwort. Dies kann man mit o.g. Datum realisieren.
naja, wann was nach DSGVO gelöscht werden muss ist nicht ganz klar geregelt.
Und wenn dann geht es ja auch um Daten von Kunden, die auch bestellt haben und auch z.B. um Datenbank-Backups etc.
Ich meine es geht hier einfach um ‘Aufräumen’. Und dabei muss man auf jeden Fall ein Datum mit einbeziehen - z.B. oxtimestamp in oxuser. Denn sonst würde man u.U. Daten eines Kunden löschen der gerade eben im Bestellprozess ist.
Ja, das stimmt. Egal mit oder ohne Passwort. Wenn sich nämlich ein Kunde mit Passwort vor Monaten / Jahren registriert hat und dann doch nicht bestellt hat…und ich keinen Newsletter anbiete…warum also diese Daten speichern? Oder gäbe es einen Grund, den ich noch nicht kenne??
Ich fasse zusammen. Ich führe folgende SQL-Anweisungen durch in dieser Reihenfolge (ich wähle die Variante mit Datum):
DELETE FROM oxuser WHERE oxid IN ( SELECT oxuserid FROM oxorder WHERE oxorderdate >= ‘2000-01-01 00:00:00′ AND oxorderdate <= ‘2014-10-22 14:04:19′)
DELETE FROM oxaddress WHERE oxuserid NOT IN ( SELECT oxid FROM oxuser)
DELETE FROM oxuserbasket WHERE oxuserid NOT IN ( SELECT oxid FROM oxuser)
DELETE FROM oxuserbasketitems WHERE oxbasketid NOT IN ( SELECT oxid FROM oxuserbasket)
Muss ich die SQL einzeln aufrufen…und nacheinander ablaufen lassen oder kann ich diese Anweisungen in “einem Abwasch” durchführen.
d.h. Ich lösche nur die Daten von Benutzern, die NICHT bestellt haben in dem eingegeben Zeitraum, oder? Lieber nochmals nachgefragt…
@rubbercut
Du hast alles richtig gelesen und beantwortet! Danke für die schnell Rückmeldung!
Vorsicht: Die Variante mit Datum (wie sie oben steht) ist nur ein Bsp. Hierbei suchst Du nach Einträgen (“IN”), d.h. Du löschst User, die gefunden werden. Im Unterschied dazu arbeiten die anderen mit "NOT IN".
Reihenfolge: Normalerweise werden die Befehle nacheinander abgearbeitet, sodass das einzelne Ausführen nicht nötig ist.
In einem unserer Shops gibt es bestimmte Funktionen, die nur angemeldete Kunden verwenden können - ein grosser Anteil davon hat aber noch nie bestellt …
Wann muss man personenbezogene Daten löschen?
Unternehmen müssen personenbezogene Daten etwa dann löschen, wenn sie
für die Zwecke, für die erhoben oder auf sonstige Weise verarbeitet
wurden, nicht mehr notwendig sind. Der Zweck einer Datenverarbeitung
entscheidet also auf über die zulässige Dauer der Speicherung der
verarbeiteten Daten. Dieser so genannte Zweckbindungsgrundsatz ist eines
der wesentlichen Prinzipien des europäischen Datenschutzes. Unternehmen
dürfen personenbezogene Daten nur für vorher festgelegte, eindeutige
und legitime Zwecke erheben. Zudem dürfen Sie diese Daten nicht in einer
mit den ursprünglichen Zwecken nicht zu vereinbarenden Weise
weiterverarbeiten (Art. 5 Abs. 1 lit. b DSGVO). Spätestens, wenn
personenbezogene Daten für die Zwecke nicht mehr erforderlich sind, für
die sie verarbeitet werden, muss das Unternehmen diese Daten löschen.
um den sogenannten Zweckbindungsgrundsatz der DSGVO zu erfüllen muss aber sehr viel mehr gemacht werden:
Kunde hat seine Daten zwar eingegeben (ohne Konto), aber nicht bestellt - Kaufabbruch:
-> löschen nach z.B. 4 Wochen
-> delete from oxuser where oxid not in (select oxuserid from oxorder) and oxuser.oxtimestamp < ‘2018-05-19’ (ohne gewähr)
(noch besser wäre wenn im shop die Kundendaten erst bei einer Bestellung angelegt würden)
Kunde hat ein Konto angelegt aber nicht bestellt:
-> hierzu vermisse ich im oxid-shop in oxuser ein feld ‘lastlogin’!
-> dann könnten diese Daten zB nach 1 Jahr nach lastlogin gelöscht werden.
Kunde hat ohne Konto bestellt:
-> Kundendaten z.B. nach 1 Jahr löschen denn die Adressen stehen ja auch in oxorder
Kunde hat ohne Konto bestellt aber storniert bzw. zurückgeschickt
-> löschen nach z.B. 4 Wochen
…
Also wenn ich nun konkret Benutzer löschen will, die sich vor dem 18.06.2018 registriert haben und NICHT bestellt haben oder Benutzer, die sich vor dem 18.06.2018 NICHT registriert haben und NICHT bestellt haben (also als Gastbesteller mit Kaufabbruch)…
Code so exakt richtig?
Dann alle Daten wie oben beschrieben gelöscht und alle anderen Daten noch vorhanden?
1.DELETE FROM oxuser WHERE oxid IN ( SELECT oxuserid FROM oxorder WHERE oxorderdate <= ‘2018-06-17 23:59:59′)
2.DELETE FROM oxaddress WHERE oxuserid NOT IN ( SELECT oxid FROM oxuser)
3.DELETE FROM oxuserbasket WHERE oxuserid NOT IN ( SELECT oxid FROM oxuser)
4.DELETE FROM oxuserbasketitems WHERE oxbasketid NOT IN ( SELECT oxid FROM oxuserbasket)
@oxid-flo mach doch bitte ein komplettes Backup von der DB, bevor du dich ans Löschen machst!
Am besten machst du eine Kopie von der DB und tobst dich auf der Kopie zunächst aus, wenn du dir unsicher bist.
OK - also wird dann in der Datenbank kein Benutzer angelegt wenn der Kunde als “Gast” alle seine Daten eingibt, Artikel auswählt und dann doch wieder den Warenkorb löscht? Ich meine aber schon…Diesen Benutzer würde ich gerne dann löschen, der NIE etwas bestellt hat (mit Gastzugang).
Auch den Benutzer, der sich registriert hat (Kundenkonto angelegt) und NIE bestellt hat würde ich gerne löschen mit allen Daten die mit dem Benutzer im Bezug stehen.
Alle zwei Fälle sollen gelöscht werden mit dem Datum VOR 19.06.2018.
Ist hat ein “Datenmüll” und entspricht ja nicht der DSGVO.
@patchwork.de
Deine weiteren 3 Punkte sind zwar auch erforderlich und sicherlich zwingend erforderlich in einem Update…aber…die oberen zwei Fälle wären mir aktuell wichtiger. Ich frage mich ohnehin, welche Updates bzgl. DSGVO noch von Oxid vorgesehen sind / werden. Abwicklung über ein Modul weiterhin?
Falls es diese Konstellation überhaupt gibt. Eigentlich wird nur der Warenkorb von eingeloggten Usern in der Datenbank gespeichert. Sonst nur in der Session.