Kundenkonten ohne Bestellung löschen

Thema wurde von Robert Robl, 4. Februar 2026 erstellt.

  1. Robert Robl
    Robert Robl Erfahrener Benutzer
    Registriert seit:
    31. Januar 2022
    Beiträge:
    101
    Danke erhalten:
    18
    Danke vergeben:
    15
    Hallo

    Wo könnte man sich das anziegen lassen OHNE jeden Kunden einzeln durchclicken zu müssen ?

    Im Admin finde ich dazu nix und in der Datenbank finde ich bei CUSTOMER keine Spalte dazu ob der schon mal ebstellt hatte oder nicht.

    Bitte nicht schreiben mit Export/Import über das Shopsystem -- das klappt zu 99,9% nie.

    Grüsse
     
  2. Developer
    Developer Erfahrener Benutzer
    Registriert seit:
    7. November 2012
    Beiträge:
    3.195
    Danke erhalten:
    749
    Danke vergeben:
    131
    Kennst Du dich mit SQL aus?
     
  3. heinzsoft-shop.de
    heinzsoft-shop.de Erfahrener Benutzer
    Registriert seit:
    7. Juli 2014
    Beiträge:
    319
    Danke erhalten:
    147
    Danke vergeben:
    46
    Dominik Späte (werbe-markt.de) hat ein Modul bei dem Kundenkonten (die eine bestimmte Zeit nicht genutzt wurden) automatisch per Cronjob löscht. Das Modul war bisher kostenlos.
     
  4. Robert Robl
    Robert Robl Erfahrener Benutzer
    Registriert seit:
    31. Januar 2022
    Beiträge:
    101
    Danke erhalten:
    18
    Danke vergeben:
    15
    Einigermassen ja ...
    War auch in PHPmyAdmin drinnen was ja dasselbe ist....
    Wie gesagt finde ich bei CUSTOMER keine Spalte wo man sehen könnte ob was bestellt wurde.
     
  5. Robert Robl
    Robert Robl Erfahrener Benutzer
    Registriert seit:
    31. Januar 2022
    Beiträge:
    101
    Danke erhalten:
    18
    Danke vergeben:
    15
    Ich denke nicht das das das Richtige ist..... Muss ich mal schauen im werbe-markt.
    Aber ich möchte ned Konten löschen die lange nimmer genutzt wurden sondern nur die Konten bei denen keine Bestellung da is.
     
  6. heinzsoft-shop.de
    heinzsoft-shop.de Erfahrener Benutzer
    Registriert seit:
    7. Juli 2014
    Beiträge:
    319
    Danke erhalten:
    147
    Danke vergeben:
    46
    War ja nur eine Idee :) Aber eigentlich musst du ja auch ein Zeitraum festlegen ab wann du konten ohne bestellungen löschen willst.
     
  7. Developer
    Developer Erfahrener Benutzer
    Registriert seit:
    7. November 2012
    Beiträge:
    3.195
    Danke erhalten:
    749
    Danke vergeben:
    131
    @heinzsoft-shop.de: So, wie Robert es schreibt, will er alle Kundenkonten löschen.

    @Robert Robl: Es sind einige Dinge bei der Löschung zu beachten, da es Tabellenabhängigkeiten anhand der customers_id gibt. Zum Beispiel stehen die Adressen in der Tabelle address_book und die Bestellungen in der Tabelle orders. Darüber hinaus musst Du für dich noch selbst entscheiden, welche Teilbereiche gleich mitgelöscht werden sollen, damit keine verweisten Daten entstehen. Das sind alle Abhängigkeiten zum Beispiel mit admin_access_users, address_book, customers*, whos_online, newsletter* oder andere Tabellen, die die customers_id enthält. Das bedeutet jetzt nicht, dass Du alle Datensätze einer Tabelle löscht, die die customers_id enthält. Es ist eigentlich egal, für was Du dich entscheidest. Du solltest nur wirklich wissen, was Du in der Datenbank machst und was weg kann oder nicht.

    DAHER: MACH BITTE VORHER EINE SICHERUNG, BEVOR DU AN DIE DATENBANK GEHST.


    Denn, wenn die Daten weg sind und kein Backup mehr von dir oder deinem Hoster vorhanden ist, dann sind sie weg.

    Ich zeige dir erstmal den SELECT-Befehl, wie Du dir diese Kunden anzeigen lassen kannst. Mit einem SELECT kannst Du nichts löschen, aber, wenn Du Dinge in phpMyAdmin machst von dem Du keine Ahnung hast, kann dann schon etwas passieren. Ich kann ja nicht sehen, wohin Du klickst.

    Hier der Befehl: Damit lokalisierst Du die Kunden inkl. deren Adressbucheinträgen, bei denen keine Bestellung vorliegt. Der Code ist ungetestet. Für Schäden an der Datenbank haftest Du. :rolleyes:

    Code:
    SELECT c.*, ab.*
    FROM customers c
    LEFT JOIN orders o ON c.customers_id = o.customers_id
    LEFT JOIN address_book ab ON c.customers_id = ab.customers_id
    WHERE o.orders_id IS NULL;
     
  8. Robert Robl
    Robert Robl Erfahrener Benutzer
    Registriert seit:
    31. Januar 2022
    Beiträge:
    101
    Danke erhalten:
    18
    Danke vergeben:
    15
    Diesen Code habe ich im Forum gefunden - habe paar Konten gecheckt damit und da wäre keine Order dazu da
    select * from customers
    WHERE
    customers_id not IN (SELECT customers_id FROM orders GROUP BY customers_id)
     
  9. Developer
    Developer Erfahrener Benutzer
    Registriert seit:
    7. November 2012
    Beiträge:
    3.195
    Danke erhalten:
    749
    Danke vergeben:
    131
    Viele Wege führen nach Rom. Man kann auch mit einem SELECT in einem SELECT und mit einem WHERE NOT EXISTS arbeiten. :)
     
  10. Robert Robl
    Robert Robl Erfahrener Benutzer
    Registriert seit:
    31. Januar 2022
    Beiträge:
    101
    Danke erhalten:
    18
    Danke vergeben:
    15
    Beide Codes funktionieren ! Chwcke grad einige Konten aus der Liste und keine hat ne Bestellung aber Konto erstellt...
     
  11. Robert Robl
    Robert Robl Erfahrener Benutzer
    Registriert seit:
    31. Januar 2022
    Beiträge:
    101
    Danke erhalten:
    18
    Danke vergeben:
    15
    Etz muss ich nochmals fragen :)

    Die Abfragen gehen da via SQL im ShopAdmin und natürlich auch in der Datenbank. Wird alles korrelt angezeigt.

    Aber WIE lösche ich diese Konten dann ? Ich finde kein Feld wo ich nen Haken setzen könnte ?
     
  12. Developer
    Developer Erfahrener Benutzer
    Registriert seit:
    7. November 2012
    Beiträge:
    3.195
    Danke erhalten:
    749
    Danke vergeben:
    131
    Der SELECT-Befehl ist für die Anzeige gewesen. Zum Löschen der Datensätze kannst Du den DELETE-Befehl benutzen. Denk daran, dass nur die Tabellen customers und address_book bereinigt werden. Solltest Du noch andere Datensätze aus anderen Tabellen löschen wollen, muss mehr erweitert werden. Wenn Du jetzt mit meinen Queries die Datensätze löscht, weisst Du nicht mehr, welche Kunden Du gelöscht hast. Ich hoffe, Du verstehst, was ich damit sagen möchte!?

    Zwar gibt es noch die Möglichkeit diese anders rauszubekommen, aber, dass ist dann nur unnötige Arbeit.

    Prüfe mit meinem vorherigen SQL-Query, ob wirklich alles passt und denk vorallem an deine Sicherung!

    Stürz dich damit in dein Unglück: :D

    Also, theoretisch könnte man das mit einem Query machen.
    Ich möchte dich bitten, ohne jetzt technisch zu werden, es in 2 Schritten zu machen.

    Die Reihenfolge ist dabei sehr wichtig.

    1. Erst löschen wir die Datensätze aus der Tabelle address_book:

    Code:
    DELETE ab
    FROM address_book ab
    INNER JOIN customers c ON ab.customers_id = c.customers_id
    LEFT JOIN orders o ON c.customers_id = o.customers_id
    WHERE o.orders_id IS NULL;
    2. Danach kannst du die Datensätze aus der Tabelle customers löschen:

    Code:
    DELETE c
    FROM customers c
    LEFT JOIN orders o ON c.customers_id = o.customers_id
    WHERE o.orders_id IS NULL;
    Dann sollten die 2 Tabellen bereinigt sein.
     
  13. Robert Robl
    Robert Robl Erfahrener Benutzer
    Registriert seit:
    31. Januar 2022
    Beiträge:
    101
    Danke erhalten:
    18
    Danke vergeben:
    15
    Guten Morgen
    Ich denke wir sollten mal evtl telefonieren.
    Hätte es eben probiert aber im Moment keiner da.
    Diese Konten sollen komplett raus - im Admin kann man mehr anhaken !

    Wenn ich manuell lösche dann hake ich immer ALLES AUSWÄHLEN an und lösche das Konto.

    Das is aber extrem mühselig und langwierig da es vieleviele tote Konten sind.....

    Evtl könnte man den Code erweitern ? Oder reicht es es die 2 Tabellen zu löschen wie due geschrieben hast ? Den Anhang 41286 betrachten Den Anhang 41287 betrachten Den Anhang 41286 betrachten Den Anhang 41287 betrachten
     

    Anhänge:

    • 1.gif
      1.gif
      Dateigröße:
      69,4 KB
      Aufrufe:
      9
    • 11.gif
      11.gif
      Dateigröße:
      83,1 KB
      Aufrufe:
      9
  14. Developer
    Developer Erfahrener Benutzer
    Registriert seit:
    7. November 2012
    Beiträge:
    3.195
    Danke erhalten:
    749
    Danke vergeben:
    131
    Eigentlich habe ich dir alles hierzu geschrieben, Robert.

    An welcher Stelle kommst Du nicht weiter?
     
  15. Robert Robl
    Robert Robl Erfahrener Benutzer
    Registriert seit:
    31. Januar 2022
    Beiträge:
    101
    Danke erhalten:
    18
    Danke vergeben:
    15
    Ich komm schon zurecht bzw weiter.
    Der Code funktioniert mit Select und wird auch mit Delete klappen.
    Auch werde ich es in 2 Schritten dann machen wie Du geschrieben hattest.
    Aber du fragtest noch > Solltest Du noch andere Datensätze aus anderen Tabellen löschen wollen, muss mehr erweitert werden.
    Deswegen hatte ich die Screenshots gepostet was beim manuellen löschen gelöscht wird.
    Wenn es reicht das die Tabellen customers und address_book bereinigt werden ist das okay.
     
  16. Developer
    Developer Erfahrener Benutzer
    Registriert seit:
    7. November 2012
    Beiträge:
    3.195
    Danke erhalten:
    749
    Danke vergeben:
    131
    Bei meinen Queries werden nur Datensätze aus den Tabellen address_book und customers gelöscht.

    Hier musst du selbst entscheiden, was genau gelöscht werden soll, da es noch andere Tabellen mit Abhängigkeiten gibt, die die customers_id betreffen. Nicht umsonst kannst du im Backend beim Löschen diverse Bereiche entfernen.

    Wenn mehr Datensätze aus anderen Tabellen gelöscht werden sollen, müssen die Queries entsprechend erweitert oder anders aufgebaut werden. Werden sie nicht angepasst, bleiben sonst teilweise „Leichen im Keller“.

    Die Entscheidung, was im Keller bleiben soll oder nicht, kann ich dir nicht abnehmen. Du hast jedoch von mir eine Vorlage erhalten, wie du das Vorgehen angehen kannst.