2017-04-11 4 views
0

Ich habe ein Suchrätsel muss ich lösen, aber meine Fähigkeiten sind minimal, so Entschuldigung, wenn ich das nicht gut erklären. Um zu versuchen, das Problem zu demonstrieren, hier ist ein Beispiel für die Daten in zwei Datenbankspalten:PHP Fuzzy-Suche 2 Spalten und die besten Treffer

| Start address  | End address   | 
----------------------------------------------- 
1 | Essex    | Moortown, Leeds  | 
2 | Place A, London  | Place B, Manchester | 
3 | Townsville, Essex | Leeds Town Hall  | 
4 | Essex Trading Estate | Another Leeds Estate | 
5 | Somewhere, Devon  | Yeoville    | 
6 | ...     | ...     | 

Wenn zum Beispiel ein Benutzer sendet „21 Einig Street, Essex“ und „Leeds irgendeinen Platz“ in dem entsprechenden Formularfelder muss ich die MySQL-Datenbank durchsuchen und die oberste X-Zahl der besten Übereinstimmungen zurückziehen, die in diesem Beispiel Zeilen 1, 3 und 4 wären, da sie alle Essex in der ersten Spalte und Leeds in der zweiten Spalte enthalten.

Ich kann sehen, dass PHP zwei Funktionen ashite_text() und levenshtein() hat, die dabei helfen können, aber ich bin mir nicht sicher, welche für diese Art von Teil passend und am genauesten ist Suchergebnisse. Ich habe in MySQL nichts Ähnliches gefunden.

Ist jemand mit Erfahrung in der Lage, mir irgendwelche Hinweise zu geben, bitte?

Prost

Andy

+0

Sie könnten versuchen, einen 'FULLTEXT' -Verbundindex über beide Felder zu setzen und die Suche in natürlicher Sprache von MySQL zu verwenden: https://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html – CD001

+0

Sie kann sich mit den Möglichkeiten von MySQL [Volltextsuche] (https://dev.mysql.com/doc/refman/5.7/de/fulltext-search.html) befassen. –

Antwort

0

Sie einfach wie Funktion können Sie die gewünschte Such Ausgabe zu erhalten. Um die Groß-/Kleinschreibung zu umgehen, verwenden Sie die untere oder obere Taste.

select start_address,end_address from table where lower(start_address) like '%urfirststring%' 
and lower(end_address) like '%ursecondstring%' 

Übergeben Sie Ihre Suchzeichenfolgen auch in niedriger.

+0

Danke Rams. Das Beispiel, das ich verwendet habe, hat jedoch gemeinsame Wörter sowohl in den Formularfeldern als auch in den Datenbankspalten (z. B. Städte), aber diese werden mit weniger wichtigen Wörtern gemischt, die für jeden Eintrag eindeutig sind (wie Straßennamen oder Postleitzahlen)). Ich möchte Formularfeld 1 zu Spalte 1 und Feld 2 zu Spalte 2 mit Ergebnissen in der Reihenfolge der relevantesten Übereinstimmung zuordnen. – Andy

Verwandte Themen