Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie implementiert man einen effektiven Suchalgorithmus bei Verwendung von PHP und einer MySQL-Datenbank?

Ein paar verschiedene Möglichkeiten, dies zu tun:

Der schnellere (leistungstechnisch) ist:select * FROM Table where keyword LIKE '%value%' Der Trick dabei ist die Platzierung des %, das ein Platzhalter ist, der besagt, dass entweder alles gesucht werden muss, was mit diesem Wert endet oder beginnt.

Eine flexiblere, aber (etwas) langsamere könnte die REGEXP-Funktion sein:

Select * FROM Table WHERE keyword REGEXP 'value'

Dies nutzt die Kraft regulärer Ausdrücke, sodass Sie damit so ausführlich werden können, wie Sie möchten. Wenn Sie es jedoch wie oben belassen, erhalten Sie eine Art "Google des armen Mannes", sodass die Suche Teile und Teile von Gesamtfeldern sein kann.

Der klebrige Teil kommt ins Spiel, wenn Sie versuchen, Namen zu suchen. Beide würden beispielsweise den Namen „Schmied“ finden, wenn Sie nach SMI suchen. Allerdings würde "Jon Smith" nicht gefunden werden, wenn ein Feld für Vor- und Nachnamen getrennt wäre. Sie müssten also eine Verkettung für die Suche durchführen, um entweder Jon ODER Smith ODER Jon Smith ODER Smith, Jon zu finden. Von da an kann es wirklich Schneeball spielen.

Wenn Sie eine Art erweiterte Suche durchführen, müssen Sie Ihre Abfrage natürlich entsprechend konditionieren. Wenn Sie also zum Beispiel nach der ersten, der letzten und der Adresse suchen möchten, müsste Ihre Abfrage für jede:

testen
SELECT * FROM table WHERE first LIKE '%value%' OR last LIKE '%value%' OR address LIKE '%value'