2012-03-26 14 views
2

Ich habe zwei Tabellen namens Referenz und Liste. Beide haben zwei Felder: ID und Name.PHP MySql - SELECT where shnliche_text()> x

reference: 
ref_id, ref_name 
1, john 
2, georges 
etc... 

list: 
lst_id, lst_name 
1, steward 
2, james 
3, john 
4, jones 
5, georges 
etc... 

Ich möchte den Namen von beiden Tabellen, in denen similar_text() zur Auswahl> 60. Hier unten ist der Ausgang würde ich gerne haben:

ref_name, lst_name, similar_text() 
john, john, 100 
john, jones, 67 
georges, georges, 100 

Beachten Sie, dass Steward und james sollte als similar_text weggelassen werden() unter 60.

Hoffnung jemand helfen kann. Vielen Dank im Voraus für Ihr Vertrauen. Prost. Marc. Oh, nebenbei, ich bin offen für bessere Lösungen, um mein Ziel zu erreichen ...

+0

Bitte erläutern Sie, wie Sie "asiehe_text()" definieren. Zum Beispiel gibt john und jones 67. Wie wird das 67 berechnet? –

+0

Was ist diese Funktion asyme_text()? Gibt es solche in MySQL? –

+0

Oh ja. ashome_text() ist eine PHP-Funktion, die eine Übereinstimmung zwischen zwei Strings in Prozent abfragt: http://php.net/manual/fr/function.similar-text.php – Marc

Antwort

6

Sie werden wahrscheinlich levenshtein in mysql benötigen. Dadurch können Sie die Unterschiede in Strings berechnen.

Sie könnten dann so etwas wie:

SELECT ref_name, lst_name, LEVENSHTEIN_RATIO(ref_name, lst_name) as textDiff 
FROM reference, list 
HAVING textDiff > 60; 

oder etwas ähnliches.

HINWEIS: Bei der Arbeit an großen Datasets wird dies definitiv Leistungsprobleme haben.

+0

Gib mir eine Sekunde, um dies zu testen ... Tks – Marc

+0

Danke, Lösung angenommen ... – Marc

1

Um ähnliche_Text zu verwenden, müssen Sie die beiden Tabellen überkreuz verbinden, ein Array des Ergebnisses erhalten und die Funktion ähnliche_Text im Ergebnisarray verwenden. Wenn Sie das tun, können Sie das Ergebnis in einer dritten Hilfstabelle speichern.

Sie könnten jedoch die native Funktion SOUNDEX() von MySQL verwenden, die funktioniert, oder create a Levehnstein function.