Mailinglisten-Archive |
Hallo,
> hat jemand eine Idee oder ein Skript mit dem man in
> einer MySQL Adressdatenbank Doubletten abgleichen kann?
>
> So nach dem Motto wenn Name und Strasse und PLZ
> identisch sind, anzeigen ...
ich habe so etwas mal im grösseren Stil für meine Firma entwickelt.
Ich weiss nicht ob Du es so mächtig brauchst, dennoch hier mein Vorschlag:
Mein Doublettencheck ist eine "weiche" Suche, d.h. er trifft auch
(eingeschränkt) bei Buchstabendrehern usw.
Das Zauberwort unter mysql heisst "soundex". Diese Funktion generiert einen
lautsprachlich bewerteten Code, der verglichen mit anderen Worten, die
ähnlich "klingen" einen ähnlichen, bzw. sogar gleichen Code entstehen lässt.
Man vergleicht also nicht das Wort, wie z.B. die Strasse, sondern den
soundex-code der strasse mit dem soundexcode der neuen Strasse.
Naja, jedenfalls hat es sich aus performance-Gründen für mich am besten
herausgestellt, wenn man alle für den Vergleich der Adressen wichtigen
Felder zusammenfasst. Bei mir waren das plz, strasse, anrede, vorname und
nachname.
Beispiel.:
Herr, Max, Mustermann, Teststr. 1, 88888
(es macht wenig sinn anrede und plz durch die soundex-Funktion zu jagen)
ucase('Herr'), soundex('Max'), soundex('Mustermann'), soundex('Teststr. 1'),
88888
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.
Gruss, Tom
php::bar PHP Wiki - Listenarchive