Anleitung Hilfreiche SQL-Befehle

Thema wurde von Petra, 28. April 2015 erstellt.

  1. Petra

    Petra G-WARD 2013/14/15

    Registriert seit:
    27. August 2011
    Beiträge:
    6.998
    Danke erhalten:
    1.225
    Danke vergeben:
    227
    Weiß ich nicht, Barbara, ich habe es nicht gemacht. Aber ich habe mir die Lösung zurecht gepopelt:

    Um die Kunden aus der Gruppe zu löschen nehme man

    PHP:
    DELETE FROM `address_bookWHERE EXISTS (SELECT `customers_idFROM `customersWHERE (`customers`.`customers_id`=`address_book`.`customers_id`) AND (`customers`.`customers_status`='16'));DELETE FROM `customers_infoWHERE EXISTS (SELECT `customers_idFROM `customersWHERE (`customers`.`customers_id`=`customers_info`.`customers_info_id`) AND (`customers`.`customers_status`='16'));DELETE FROM `customersWHERE `customers_status` = '16';
    Und dann kann man schön die Kundengruppe löschen und gut ist. Haken war, dass die Tabelle anscheinend umbenannt wurde. Aber dank MiniSQL kann man das sogar bequem im Shop nachschauen. Ich bin begeistert!
     
  2. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Hallo Petra,

    Wenn die alte DB in den neuen Shop geladen wurde, kann es noch mehr Probleme geben.
    Da würde ich eventuell ein Update-Paket erstellen (oder vom Update-Assistenten erstellen lassen) und nur den Ordner (gambio_updater"
    in den Shop laden und ausführen.
    Das bringt die DB auf den Stand des Shops.
     
  3. Petra

    Petra G-WARD 2013/14/15

    Registriert seit:
    27. August 2011
    Beiträge:
    6.998
    Danke erhalten:
    1.225
    Danke vergeben:
    227
    Ich weiß es nicht, wie es gemacht wurde. Aber das es Kai gemacht hat, wird das schon richtig gewesen sein.
     
  4. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    OK, der sollte wissen, was er tut :D
     
  5. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Doch, das geht im Insert wunderbar und ist meiner Meinung nach das Eleganteste, da es am besten zu lesen ist, da Spalte und Wert beieinander stehen.
     
  6. tiger955

    tiger955 Erfahrener Benutzer

    Registriert seit:
    30. März 2015
    Beiträge:
    226
    Danke erhalten:
    9
    Danke vergeben:
    47

    Nun, das angeführt Script hat die Daten wohl gelöscht, aber dennoch nicht sauber.


    Ob es letztlich irgend welche Auswirkungen im Gambio Webshop hat, mag ich nicht zu beurteilen, aber Fakt ist, dass nur mit dem SQL-Script zumindest in folgenden Tabellen verwaiste Datensätze übrig bleiben:
    customers_basket; `customers_logs_history`, `customers_ip`, `customers_memo`, `customers_status_history`, `customers_wishlist`, `customers_wishlist_attributes` und eventuell auch noch anderen Tabellen (hab nicht alle durchsucht).
    Also alle Tabellen, wo der gelöschte Primärschlüssel customers_id als "Fremdschlüssel" vorkommt. Dort fehlt nun eine "Beziehung" zur Tabelle customers.


    Siehe dazu auch:


    https://de.wikibooks.org/wiki/Einf%C3%BChrung_in_SQL:_Fremdschl%C3%BCssel-Beziehungen


    Wie gesagt, ob es irgend eine Auswirkung auf die DB hat, weiß ich nicht, aber wenn man schon beinhart Daten mit Primärschlüsseln löscht, sollte man auch wissen, wo diese als Fremdschlüsseln vorkommen und auch dort die betreffenden Datensätze löschen. So macht man es halt in anderen Applikationen.


    Tabelle orders ist insofern eine Ausnahme, da kommt zwar customers_id auch vor, aber einerseits haut es dir alle Umsatzstatistiken zusammen, wenn dort die Uralt-customers auch gelöscht werden andererseits ist dort neben der customers_id auch der Name des Kunden hineingeschrieben worden, also weiß man indirekt wiederum zu wem die verwaisten Datensätze in den nicht gesäuberten customer-Tabellen (siehe oben) gehören.
    Genug der DB-Theorie, Hauptsache, Dein Shop funktioniert, wie du es haben willst.
     
  7. Petra

    Petra G-WARD 2013/14/15

    Registriert seit:
    27. August 2011
    Beiträge:
    6.998
    Danke erhalten:
    1.225
    Danke vergeben:
    227
    Wo keine Bestellungen und keine Umsätze, da haut es mir auch nichts zusammen. Es ging ja lediglich darum, nur die eingefügten Kunden zu bereinigen. Mehr ist da auch nicht drin, außer die Kundendaten.
     
  8. tiger955

    tiger955 Erfahrener Benutzer

    Registriert seit:
    30. März 2015
    Beiträge:
    226
    Danke erhalten:
    9
    Danke vergeben:
    47
    Na, dann paßt ja alles!
    Aber warum in einer Datenbank Kunden sind, die sich allesamt nur angemeldet hätten und dann nichts gekauft haben sollen, ist mir nicht klar, vor allem wie dann die Kundendaten rein kommen....

    Ich hoffe aber, dass ich Dir vermitteln konnte, warum man normal alle Datensätze mit Fremdschlüsseln löschen sollte, wenn man die zugehören Primärschlüssel löscht.
     
  9. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Januar 2016
    Beiträge:
    656
    Danke erhalten:
    115
    Danke vergeben:
    20
    Beim besten Willen aber ich sehe keine "Fremdschlüssel" in der Gambio DB erstellten Schema.

    Gerade durch "foreign_keys" (Fremdschlüssel) und einem "constraint" Ansatz werden alle Einträge die in Verbindung mit dem Fremdschlüssel in Zusammenhang stehe auf Anhieb gelöscht. Man muss also nicht zuerst alle "Verknüpfungen" zusammen suchen und dann erst die Einträge löschen. Ich glaube du verwechselst da etwas.
     
  10. Petra

    Petra G-WARD 2013/14/15

    Registriert seit:
    27. August 2011
    Beiträge:
    6.998
    Danke erhalten:
    1.225
    Danke vergeben:
    227
    Kann ich dir erklären. Durch magnalister wurden alle Amazon Bestellungen in den Shop geladen. Dort wurden sie als Gast mit Kundenkonto abgelegt. Ein normales Löschen der Gastkonten war also nicht möglich. Da die Bestellungen aber sowieso in unsere Wawi eingelesen werden, brauche ich diese toten Adressen nicht. Ich darf sie nicht anschreiben und kann mit denen nix anfangen. Durch einen Fehler von Mailbeez, oder durch meine Einrichtung, wurden mal alle Kunden mit ausgelieferten Amazon Bestellungen angeschrieben. Der erhobene Amazonfinger kam postwendend :D
     
  11. tiger955

    tiger955 Erfahrener Benutzer

    Registriert seit:
    30. März 2015
    Beiträge:
    226
    Danke erhalten:
    9
    Danke vergeben:
    47
    Die Gambio DB hat keine Foreign_key definiert! Zumindest sehe ich keine, wenn ich sie in der Workbench öffne.
    Ich denke, es liegt daran, dass es eine MyISAM und keine InnoDB ist.
    Jedenfalls wird kein Datensatz aus einer anderen tbl gelöscht, wenn man einen Datensatz aus customers löscht, obwohl die gelöschte customers_id (PK) in anderen tbls als FK vorkommt.
    Daher meine Empfehlung auch die anderen tbls zu "säubern".
     
  12. tiger955

    tiger955 Erfahrener Benutzer

    Registriert seit:
    30. März 2015
    Beiträge:
    226
    Danke erhalten:
    9
    Danke vergeben:
    47
    Petra, ich wollte Dich nicht belehren, sondern nur verhindern, dass durch das Löschen von "Hauptdatensätzen", in anderen Tabellen unzuordenbare Daten herumschwirren. Wenn andere Tabellen ohnehin keine Datensätez, die auf die Haupttabelle referenzieren, dass ist es ja OK.
     
  13. Petra

    Petra G-WARD 2013/14/15

    Registriert seit:
    27. August 2011
    Beiträge:
    6.998
    Danke erhalten:
    1.225
    Danke vergeben:
    227
    Das kann sogar sehr gut möglich sein. Beispiel Gastkonten: Wenn ich ein Gastkonto lösche, lösche ich nicht automatisch die Bestellung. Und ich habe mal versucht, alle Kundendaten als Liste zu bekommen. Geht nicht, weil alleine Adresse und Lieferanschrift in zwei Tabellen waren.
     
  14. Petra

    Petra G-WARD 2013/14/15

    Registriert seit:
    27. August 2011
    Beiträge:
    6.998
    Danke erhalten:
    1.225
    Danke vergeben:
    227
    tiger, alles gut. Ich habe das jetzt auch nicht als Belehrung aufgefasst. Außerdem lernt man ja nie aus, gelle :D
     
  15. Anonymous

    Anonymous Beta-Held

    Registriert seit:
    18. Dezember 2014
    Beiträge:
    2.521
    Danke erhalten:
    806
    Danke vergeben:
    906
    @All,

    ich möchte gerne für alle Artikel inkl. Artikeleigenschaften den Lagerbestand ändern. Gibt es hierfür einen SQL-Befehl?
     
  16. Denis J.

    Denis J. Mitglied

    Registriert seit:
    19. Juni 2012
    Beiträge:
    20
    Danke erhalten:
    1
    Danke vergeben:
    1
    Hi,
    gibt es auch einen SQL Befehl für Newsletter auf abonniert ändern? :)
     
  17. BB-Toys

    BB-Toys Erfahrener Benutzer

    Registriert seit:
    12. Januar 2012
    Beiträge:
    175
    Danke erhalten:
    21
    Danke vergeben:
    40
    @Denis J.

    Damit würdest du ja den Kunden den Newsletter aufzwingen, auch wenn er ihn nicht möchte. Wer Interesse an dem Newsletter hat wird sich schon eintragen, man kann den Newsletter ja irgendwie schmackhaft machen, mit Rabatt oder so
     
  18. johannes_honke

    johannes_honke Erfahrener Benutzer

    Registriert seit:
    5. April 2016
    Beiträge:
    162
    Danke erhalten:
    4
    Danke vergeben:
    13
    geht es allen artikeln einen bestimmten gx costumizzer zu zuweisen?
     
  19. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.831
    Danke erhalten:
    1.122
    Danke vergeben:
    947
    Wenn er doch möchte:

    Code:
    update customers set customers_newsletter = 1;
    Vorher bitte Sicherung der DB erstellen. Ungetestet.
     
  20. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    9. Oktober 2014
    Beiträge:
    248
    Danke erhalten:
    31
    Danke vergeben:
    127
    Muss dann nicht auch noch der Kunde in die Tabelle newsletter_recipients eingetragen zu werden?