Seite 1 von 1
datenbank auf doppelte einträge überprüfen
Verfasst: 11.05.2006 13:50
von mgutt
Ich habe zwei Emaildatenbanken fusioniert.
Dummerweise waren da auch Einträge wie "mailto:..." enthalten. Die habe ich nun entfernt.. also das "mailto:". Jetzt kann es aber sein, dass ich zwei mal die gleiche Emailadresse gespeichert habe.
Wie könnte ich das nun prüfen lassen und bei Bedarf entfernen?
Gruß
Verfasst: 11.05.2006 15:06
von Spezial
da gibts soweit ich weiß ne sql funktion zu. leider weiß ich nicht wie die heißt oder so.
aber notfalls könnte man es so machen, das du jeden einzelnen eintrag ausliest, ihn dann in ner whileschleife durchlaufen lässt und jedes mal ne anfrage machst über mysql_num_rows() wie oft der eintrag da ist und dann noch via if guckst ob es größer 1 ist und wenn ja löscht du alle einträge mit der email limit = insgesamt - 1.
ist aber eine sehr unsaubere lösung

aber was besseres weiß ich nicht. sry.
greetz
Verfasst: 11.05.2006 15:28
von mgutt
ne es sind leider zu viele emailadressen.. das würde zu lange dauern.
distinct z.b. prüft auf doppelte und gibt keine doppelten aus.. aber ich bräuchte ja das gegenteil.
gruß
Verfasst: 11.05.2006 15:53
von S2B
Ich hab gerade mal ein bisschen getestet, aber irgendwie mag mich MySQL heute nicht (oder ich bin zu
untalentiert 
):
Code: Alles auswählen
SELECT e1.* FROM emails e1, emails e2
WHERE e1.email = e2.email
GROUP BY e1.email
HAVING COUNT(e2.email) > 1
Das gibt dir zumindest mal die doppelten Adressen aus, wie du allerdings alle Einträge ausgeben lassen kannst, weiß ich im Moment leider nicht.

Verfasst: 11.05.2006 16:32
von mgutt
Das ist es glaube ich:
Code: Alles auswählen
SELECT DISTINCT email, count(email) as anzahl FROM emails_table GROUP BY email HAVING count(email)>1
EDIT:
Das klappt, aber dummerweise kann ich im phpmyadmin in den Ergebnissen nichts auswählen. Die gewohnte Ansicht mit bearbeiten etc. kann ja nicht dargestellt werden, weil der einfach nur die Summen darstellt und das betreffende Ergebnis. Ich könnte natürlich alle einzeln rausschreiben, aber das ist auch wieder nicht so sinnvoll

Verfasst: 11.05.2006 16:35
von S2B
Hmm, mit der Zeit wird mir SQL eindeutig zu hoch... *g*
Verfasst: 11.05.2006 16:40
von mgutt
*edit* gemacht

Verfasst: 11.05.2006 20:08
von Pyramide
Eine Möglichkeit wäre
Code: Alles auswählen
INSERT INTO neuetabelle (email) SELECT DISTINCT email FROM altetabelle