2016-06-30 17 views
0

Ich schreibe eine Abfrage, die mir erlauben sollte, in verschiedenen Spalten nach einem bestimmten Suchstring zu suchen.mysql - concat für den Wert innerhalb einer einzelnen Zelle verwenden

Meine Datenbank als 3 Spalten Ich brauche den Suchbegriff zu suchen und vergleichen mit:

manufacturer 
model 
number 

Das Problem, das ich habe ist, dass die Menschen (in beliebiger Reihenfolge) jede dieser Spalten suchen erlaubt sein sollen, .

Jetzt habe ich concat_ws('%20',manufacturer,model,number) like '%$q%' verwendet und es funktioniert irgendwie.

Nehmen wir an, ich habe diese Werte in meine DB Spalten (wie sie jetzt sind, kein Komma und kein Trenn - sie Namen in mein Lese DB sind, ich vereinfacht sie als Buchstaben hier der Einfachheit halber):

manufacturer: A B 
model: C D E 
number: F G H 

und ich möchte suchen:

A B C D F H //this doesn't work. 
A C F //this does work. 

Das Problem, das ich habe ist, dass alle meine Spalten können durch mehrere, mit Leerzeichen getrennt, Wörtern zusammengesetzt werden.

Wie kann ich in jeder Reihenfolge nach jedem Wort in jeder Spalte suchen?

hoffen diese frage ist klar genug, bitte zögern sie nicht fragen sie mehr details wenn erforderlich.

Dank

+0

Was ist der Grund für die Verwendung von Concat? Sie können so etwas tun: 'Hersteller wie '% string%' oder Modell wie '% string%' oder Nummer wie '%%'' –

+0

Es war, weil ich in der Lage sein muss, nach jeder Spalte in jedem möglichen order zu suchen . Ich habe gerade Ihren Vorschlag getestet, aber das funktioniert auch nicht, weil ich am Ende eine Zeichenfolge mit Hersteller-Modellnummer und Hersteller wie '% Hersteller Modellnummer%' ist leer, wie es nicht in der Spalte Hersteller ist so – Nick

+0

Kannst du bitte die volle sql posten? –

Antwort

0

Nach der Abfrage ein wenig herumspielen, habe ich am Ende mit dieser Arbeitslösung auf.

Ich werde es für den Fall, hier zu schreiben, ist dies auch für jemand anderen nützlich:

$q = $_REQUEST['search']; 
$decoded = urldecode($q); 
$q_array = array_filter(explode(' ', str_replace('', ' ', $decoded))); 

$counter = 0; 
$searchTerms = ''; 

foreach ($q_array as $q) { 
    $counter++; 
    if ($counter == 1) { 
     $searchTerms .= "concat_ws(' ',manufacturer,model,number) like '%$q%'"; 
    } else { 
     $searchTerms .= "and concat_ws(' ',manufacturer,model,number) like '%$q%'"; 
    } 
} 



$first_query_part = "select manufacturer, model, number from table where ";  
$sql_res = $first_query_part . $searchTerms; 

Und das funktioniert.

Grundsätzlich teile ich jedes gesuchte Wort und ich schiebe sie in ein Array, dann zähle ich die Wörter und füge concat_ws(' ',manufacturer,model,number) like '%$q%'"; für jedes gesuchte Wort an.

Verwandte Themen