2012-04-07 13 views
1

Ich habe Suchmechanismus in meiner Website. Dafür habe ich eine große bedingte Abfrage geschrieben.Komma getrennte Suche in MySQL Abfrage

$sql = "select * from users where 
keyword like '%".$_POST['search']."%' 
OR name like '%".$_POST['search']."%'"; 

Nun, ich nehme an, ich habe folgende Daten auf der Website:

ID Name Keyword 
1  Sanjay sanjay, surani 
2  Ankit ankit, shah 
3  Ravi ravi, kotwani 

Nun, ich brauche das Ergebnis so, dass, wenn der Benutzer schreibt "sanjay, shah" ($_POST['search'] = 'sanjay, shah') dann Datensätze 1 und 2 sollen angezeigt werden.

Kann ich dies in einzelnen MySQL-Abfrage erreichen?

+1

Als beiseite, mit un-geprüft Benutzereingaben (GET oder POST-Daten, zum Beispiel) direkt in Ihren Abfragen vereinfacht a * sehr schlecht * Idee und öffnet Dich bis zu SQL-Injektion. Verwenden Sie mindestens mysql_real_escape_string() ', um Benutzereingaben zu bereinigen. – mrlee

Antwort

0

hier ist sie:

$query_elems = explode(",", $query); 
$searches = array(); 
foreach($query_elems as $qe){ 
    $searches[] = "keyword like '%" . trim($qe) . "%' or name like '%" . trim($qe) . "%'"; 
} 
$query = "select * from users where " . implode(" or ",$searches); 
$result = mysql_query($query) 
+0

Ja, du hast recht ich kann auf diese Weise erreichen. Aber ich habe hier nur das Beispiel angeführt. Meine aktuelle Suchanfrage ist 200 Zeilen lang in meiner PHP-Datei. Also, wenn ich in der oben genannten Weise tun werde, muss ich so viele Änderungen machen und kann die gesamte Funktionalität etc. erneut testen. Also ich möchte einen Weg (Regex oder Volltextsuche usw.), die mein Problem behandeln kann in Abfrage nur an Stelle von OR .... –

+0

können Sie ein Versuchbares mit Namen erstellen und dann links den Benutzern beitreten? –

2

Was ist, wenn Sie das Stichwort Feld restrukturieren waren und es zu brechen, so dass es in ihm nur einen einzigen Namen hatte?

Also statt

ID Name Keyword 
1  Sanjay sanjay, surani 
2  Ankit ankit, shah 
3  Ravi ravi, kotwani 

würden Sie

ID Name KeyID 
1  Sanjay 1 
2  Sanjay 2 
3  Ankit 3 
4  Ankit 4 
5  Ravi 5 
6  Ravi 6 

KeyID Keyword 
1  sanjay 
2  surani 
3  ankit 
4  shah 
5  ravi 
6  kotwani 

Suchbegriffe haben viel schneller wäre.

0

Verwendung von PHP in_array dies Ihr Problem

Verwandte Themen