2017-12-06 14 views
0

私はmysqlクエリで文字列を一致させる際に問題に直面しています。私はLaravelを使用しています。私の問題は私の要求されたサービスがhair cut womenであり、データベースで私serviceHair Women Style & CutあるMySQLはすべての文字列に一致します

-> where ('service', 'like', '%'. $request->get('service') . '%') 

この行にあります。何らかの理由で、これらの2つの文字列が一致しません。

ので、

play gameplay good two & game

と一致しません。この試合で動作するようになって上記のクエリですか?特別チャレーター&が試合を妨害していますか?私はMySQLを経験していないので、私は助けを求めています。

+0

のようになります。申し訳ありませんが、それはどのように作品を好きではないです。 'LIKE%two words% 'は、0またはそれ以上の任意の文字を両側に持つ正確なテキスト' two words'を含む必要があることを意味します。したがって、例えば、ここでは「これらの2つの言葉」にマッチしますが、2つの言葉には一致しません。 –

+0

両側に '% 'を使用することは、あなたの目標に応じて左右いずれかで正確に使用することを意味しますが、データベース内の単語の順序にも従う必要があります – Roljhon

+0

' '%hair cut women%'' &Cut'は単語が正しい順序でないので、 'Hair Cut Women Style&Cut'ならば一致します。ワイルドカード '%'が実際に何をしているのかを調べたいと思うかもしれません。 – MCMXCII

答えて

2

%string%は、前後に0文字以上の数字が一致するstringと一致します。あなたが検索用語を分割し、複数の句を作成する必要があり、その後の言葉と一致するかどう

で混合不一致単語がありますので
%hair cut%cool hair cutなくhair for cut一致します。

$terms = explode(" ", $request->get('service')); 
for ($terms as $term) 
    $query->where('service', 'like', '%'. $term . '%') 

結果のクエリは

WHERE service LIKE '%hair%' AND service LIKE '%cut%' 
+0

しかし、私はこれが遅くてスケーラブルではないと思いますか?私はどこかで、2つのワイルドカードを使っているのが好きではないことを読んでいます。 – Cowgirl

+0

結果のクエリは 'WHERE service like%hair%AND service LIKE%cut%'と似ています – JoshKisb

+0

これは私にとってはうまくいくが、これが最良の実装であるかどうかを知る必要がある。 – Cowgirl

関連する問題