MySQL Doppler bereinigen

K345601

Forenneuling
ID: 345601
L
19 März 2009
3.596
274
Hallo,

ich habe eine Tabelle, wo die Einträge in den Spalten

j
m
t

organisiert sind.

Bei angenommen j wäre jahr, m wäre monat sollte dann in t = tag dann nur jeweils ein Eintrag sein. Dort sind aber teilweise richtig nur jeweils ein Eintrag, aber auch manche doppelt.

Mit welchem mysql-Befehl lösche ich die überflüssigen am sinnvollsten?

Danke für Tipps ...
 
Hast du denn dafür gesorgt, dass zukünftig keine weiteren doppelten Einträge entstehen können? Vorher ist es relativ sinnlos den bisherigen Bestand zu bereinigen.

Am besten fasst du diese drei Spalten auch als Ersatz in eine date-Spalte zusammen. Deine späteren Abfragen laufen dann fast so einfach wie jetzt, einfach statt z.B. "WHERE m = 5" zukünftig "WHERE MONTH(datum) = 5".

Und was steht denn in den restlichen Spalten? Woher soll irgendein Programm wissen welche der doppelten Einträge du behalten möchtest und welche nicht? Mal angenommen das wären Counter-Daten.. in einer Zeile steht für ein int-Spalte 34 und für doppelten Eintrag in der selben Spalte 57. Hier wirst du dir erst überlegen müssen, wie man automatisiert die "richtigen" Zeilen finden kann - oder alternativ manuell löschen.
 
Zuerst ordentliches DB-Design machen:

  1. DATE-Datentyp verwenden! Oder hat es einen besonderes Zweck, dass du Tag, Monat, Jahr aufgeteilt hast?
  2. Falls ja, dann setze einen UNIQUE-Index über die 3 Spalten. Vermutlich ist das sogar der PRIMARY-Key (bzw. sollte! sein).
Zum Aufspüren der Duplikate:
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B] foo, [B][COLOR=#9932cc]COUNT[/COLOR][/B][COLOR=#9932cc]([/COLOR]*[COLOR=#9932cc])[/COLOR]
[B][COLOR=#9932cc]FROM[/COLOR][/B] [B][COLOR=#9932cc]table[/COLOR][/B]
[B][COLOR=#9932cc]GROUP[/COLOR][/B] [B][COLOR=#9932cc]BY[/COLOR][/B] foo;[/FONT]
listet alle Einträge in der Spalte foo auf und die Anzahl ihrer Vorkommen. Du kannst ein
Code:
[FONT=Courier New][B][COLOR=#9932cc]HAVING[/COLOR][/B] [B][COLOR=#9932cc]COUNT[/COLOR][/B][COLOR=#9932cc]([/COLOR]*[COLOR=#9932cc])[/COLOR] > 1[/FONT]
dranhängen, wenn du nur Mehrfach-Vorkommen finden willst.
Mit drei statt einer Spalte gehts analog.