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