2017-11-02 1 views
1

Wie schreibe ich eine SQL-Suchanweisung, wobei die Eingabe eine durch Leerzeichen getrennte Zeichenfolge ist und jedes Wort zu einer anderen Spalte gehört?SQL Where-Klausel mit Delimiter

Zum Beispiel:

Sucheingabe: 2011 Audi Q7

Wo "2011" sucht nach dem Jahr,

"Audi" sucht nach der Marke,

und "Q7" sucht nach dem Modell

ich AJAX mit einem Filter für meine SQL-Tabelle zu erstellen, hier ist der Code, den ich mit bin zu arbeiten, aber nicht funktioniert:

Datenbank

|year|make|model| 
---------------- 
|2017|Audi|Q7 
----- ---- ----- 
... | ...| ... 

PHP

public function categoryOptions() { 
    $term = $this->request->input('term'); 
    $options = VehiclesModel::where('year', 'like', '%'.$term.'%')->where('make', 'like', '%'.$term.'%')->where('model', 'like', '%'.$term.'%')->get(); 
    return $options->pluck('id','year','make','model'); 
} 

Ich denke, ich muss ein Trennzeichen in verwenden, aber nicht sicher, wie das gemacht wird.

+2

Sie müssen den Begriff in die relevanten Teile aufzuspalten, bevor Sie die SQL-Klausel versuchen und bauen. Wenn sie immer durch Leerzeichen getrennt und immer in der richtigen Reihenfolge angezeigt werden, können Sie etwas wie $ terms = explode ("", $ term) machen und dann nach $ terms [0] 'und' $ terms suchen [1] '. – MCMXCII

Antwort

0

Split $ Term von ' ' und Sie werden ein Array mit Jahr in [0], make in [1] und Modell in [2] haben. Etwas wie:

public function categoryOptions() { 
    $term = $this->request->input('term'); 
    $terms = explode(' ', $term); 
    $options = VehiclesModel::where('year', 'like', '%'.$terms[0].'%')->where('make', 'like', '%'.$terms[1].'%')->where('model', 'like', '%'.$terms[2].'%')->get(); 
    return $options->pluck('id','year','make','model'); 
} 
+0

Danke! Es hat das korrekte Ergebnis zurückgegeben, aber meine Antwort zeigt nur {"2011": 5}, das ist das Jahr und ID – cvassios

+0

Nicht sicher, was Sie mit Ihrer letzten Aussage meinen "Sie müssen auch den Ort für das Modell nach der Rückkehr hinzufügen. " – cvassios