Stefan Falz: Doppelte Einträge löschen

Beitrag lesen

Hallo Christian,

von daher nun meine frage, ob es eine elegante methode gibt, die datenbank zu durchsuchen und doppelte einträge zu löschen?

die Frage hat zwar eher was mit SQL als mit PHP direkt zu tun,
daher habe ich Dir mal ein Beispiel erstellt:

SELECT * INTO tblTemp FROM <tabelle> WHERE <tabelle>.<feld> IN
(SELECT <feld> FROM <tabelle> GROUP BY <feld> HAVING COUNT(<feld>) > 1)
AND <tabelle>.<idfeld> > (SELECT min(<idfeld>) FROM <tabelle>);

Zur Erklärung:
<tabelle> - Der Name Deiner Tabelle
<feld> - Feld, in dem doppelte Werte vorkommen können
<idfeld> - Unique Key der Zeile (muss vorhanden sein)

Damit erzeugst Du eine temp. Tabelle, die alle doppelten Zeilen der Originaltabelle beinhaltet. (Abfrage der mehrfach vorkommenden Werte in Spalte <feld>)
Durch die Angabe:
AND <tabelle>.<idfeld> > (SELECT min(<idfeld>) FROM <tabelle>);
wird der erste Satz, der mit diesem Wert angelegt wurde, nicht in
tblTemp eingetragen, da Du da bestimmt einen behalten willst.

Nun setzt Du noch ein Delete auf die Originaltabelle ab und fertig.
DELETE FROM <tabelle> WHERE <idfeld> IN (SELECT <idfeld> FROM tblTemp);

Evtl. noch die temp. Tabelle löschen:
DROP TABLE tblTemp;

Allerdings übernehme ich keinerlei Garantie, dass das auf MySQL
funktioniert. Und Du solltest auf jeden Fall vorher eine Sicherungskopie
der Datenbank anlegen.
Für Schreib- Syntax- und alle sonst irgendwie möglichen Fehler
wird keine Garantie übernommen.
Wenn alles klappt, gehört der Code mir und jeder der ihn liest, muss
Lizenzgebühren wegen evtl. Verwendung in anderen Projekten zahlen :-))

Tschau, Stefan