Mailinglisten-Archive |
> ergibt: > > HERR, M200, M2365, T23236, 88888 > > das alles zusammengehaengt als ein Feld: > > "HERRM200M2365T23236888888" > > Diesen String lege ich für jeden Adressdatensatz in ein eigenes > Datenbankfeld. > Der neue Datensatz wird ebenfalls so gewandelt und damit verglichen: > SELECT id FROM Adressen WHERE > soundex_code=CONCAT(ucase('$anrede'),soundex('$vorname'), > soundex('$nachname'), soundex('$strasse'), '$plz'); > > Nunja, auf den ersten Blick denkt man: "das funktioniert > nie", aber es hat > sich gezeigt, dass so etwa 85% der von Usern eingegebenen > Adressdaten (trotz > tippfehlern!) abgeglichen werden können. > Welche Felder du bei deinen Adressen als "wichtig" erachtest, > kann natürlich > abweichen. > sicherlich die beste idee um eine Datenbank zu pflegen - aber um dafür zu sorgen, dass erst gar keine doppelten einträge reinkommen (wobei man dabei tippfehler ignoriert) sollte man einen unique key auf die entsprechenden Spalten legen. Und dank einer MySQL - Erweiterung des ANSI SQL kannst Du das verwenden um nachträglich alle doppelten Einträge zu entfernen. Also anstelle den selects die hier kursierten (und die i.allg. ewig dauern) setzt Du einfach den Key, das dauert eine Sekunde oder so, dann sind alle doppelten Einträge weg und kommen auch nie wieder ;-) alter table tbl_name ADD UNIQUE INDEX killer (vorname,nachname,plz) IGNORE dazu aus dem Manual: IGNORE is a MySQL extension to ANSI SQL92. It controls how ALTER TABLE works if there are duplicates on unique keys in the new table. If IGNORE isn't specified, the copy is aborted and rolled back. If IGNORE is specified, then for rows with duplicates on a unique key, only the first row is used; the others are deleted. Gruß Mike Beck mikebeck_(at)_users.sourceforge.net
php::bar PHP Wiki - Listenarchive