phpbar.de logo

Mailinglisten-Archive

AW: [php] Doublettenabgleich

AW: [php] Doublettenabgleich

Thomas Schön php_(at)_phpcenter.de
Thu, 24 Oct 2002 09:21:31 +0200


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