phpbar.de logo

Mailinglisten-Archive

[php] Doublettenabgleich

[php] Doublettenabgleich

Beck, Mike php_(at)_phpcenter.de
Thu, 24 Oct 2002 09:57:18 +0200


> 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