2012-03-29 5 views
0

Ich brauche Hilfe in einem Projekt, an dem ich gerade arbeite. HierAbfragen durchführen, ohne zu wissen, was der Benutzer eingegeben hat (SQL, PHP)

ist, was ich versuche zu tun:

Ich arbeite mit MySQL und PHP auf einer Webseite. Es gibt ein Eingabefeld, in dem der Benutzer einen Ort (Land, Stadt, Staat), Datum, Rennlänge oder den Namen des Rennens eingeben wird. Die Sache ist, dass sie eine beliebige Kombination dieser Elemente eingeben können (genau wie Sie in Google können).

Danach muss ich die Datenbank abfragen, um die Ergebnisse anzuzeigen. Dies ist die Abfrage, die ich gerade benutze:

LIKE '$str%' 
OR city LIKE '$str%' 
OR state LIKE '$str%' 
OR country LIKE '$str%' 
OR race_distancia LIKE '$str%' 

$ str ist eine PHP-Variable, die den Eingabetext enthält.

Ich benutze '$ str%', da es den Index verwendet, den ich erstellt habe, obwohl dies nicht richtig funktioniert, da der reguläre Ausdruck am Ende hinzugefügt wird. Wenn ich zum Beispiel "Miami 5k" tippe, wird es nicht funktionieren. Da kein Rennen heißt Miami 5k, noch ein Ort ... Aber es gibt 5ks in Miami hehe.

Ich dachte über das Explodieren des eingegebenen Textes auf den Räumen und das Ausführen einer Abfrage für jedes aufgelöste Element nach und löschte dann die wiederholten Ergebnisse. Das wird funktionieren, aber ich versuche, die effizienteste Lösung zu finden, und ich bin mir nicht sicher, wie man wiederholte Dinge vermeiden kann.

Vielen Dank im Voraus!

+1

Verwenden Sie zunächst etwas wie PDO (PHP Database Object), um Abfragen vorzubereiten, um SQL-Injektionen zu verhindern. –

+0

diese scheinen eher definierte Suchbegriffe, ich würde eine Box für Land haben, dann eine Box für die Stadt .... kann möglich sein, eine Liste für einige von ihnen und freien Text für andere –

+0

Exploding auf Leerzeichen wird nicht funktionieren, wenn Da ist eine Stadt mit zwei Wörtern. Auch, wenn jemand eine Stadt sucht, die auch ein Staatsname ist, IE "New York, New York" wird Ihre Abfrage nicht wie vorgesehen funktionieren. – Norse

Antwort

0

Sie können die Eingabe in Worten brechen:

$searchWords = explode(" ", $input); 

Wenn jemand Typen in Los Angeles, wird es für 'Los' suchen und 'Angeles', aber ich denke, es wird gut genug funktionieren. Sie können eine erweiterte Suche mit mehr Eingabefeldern durchführen, wenn es zu viele Ergebnisse gibt.

Edit: Ich sah Sie geschafft, so weit zu kommen. Um doppelte Wörter zu filtern: PHP : Find repeated words with and without space in text

Edit2: Wie für die Los Angeles Frage: vielleicht mit "Los Angeles" als Suchbegriff ist akzeptabel. Um dann in einem Array zu erhalten, sehen Sie sich diesen sehr guten Post darüber an: PHP explode the string, but treat words in quotes as a single word