2017-01-09 7 views
-2

だから私はこのコードを使用する場合SELECT * FROM user where BINARY LOWER(name) LIKE LOWER('%{$search}%')LEEの単語を検索すると、LEEを使用するすべての文字が表示されます。私は手紙を検索した場合 のようなS LEE P、LEE YONE、U LEELEE OPARDなど さらに悪いことには、まだ、 "" すべてが表示されます。単語ごとにmysqlのデータを見つける方法は?

単語単位でのみ作成できますか?私はLEE YONE

+0

SELECT * ( '%search $') – Ruby

+1

なぜ正確にバイナリ比較を明示的に使用してから、あなたのキーワード**を両方ともキャストしますか?データ**を小文字に変換して大文字小文字を区別しない(=非バイナリではない)比較を行い**、潜在的なインデックスの利点**を完全に排除し**大規模なテーブルでのパフォーマンスを予想通りに*殺す* –

+0

$ search変数の先頭と末尾に、$ search = ""のようにスペースを1つ追加する必要があります。 $ search。 ""; 'この変数をクエリに使用します。 また、次のようにクエリーにスペースを追加することもできます: 'SELECT * FROM user where BINARY LOWER(name)LIKE LOWER( '%{$ search}%')' これはスペースが文字列内の単語を区切るものであるためです。 –

答えて

0

WHERE name REGEXP '[[:<:]]LEE[[:>:]]'

を試してみてください表示されます言葉LEE、検索する場合、あなたの照合が妥当な値に設定されている場合、多分また、あなたははLOWER()する必要はありません。あなたの$検索がLEEために、検索語の周りにワイルドカード(看板)のあるときにU LEEを返しSELECT * FROM user where BINARY LOWER(name) LIKE LOWER('%{$search}%')

0

あなたのクエリ。

あなたはLEEのみ正確LEEあるエントリを返しますのためのあなたの$検索をSELECT * FROM user where BINARY LOWER(name) LIKE LOWER('{$search}')に変更した場合。

あなたもLEEヨネが返さたい場合は、(検索語の後に%に注意)SELECT * FROM user where BINARY LOWER(name) LIKE LOWER('{$search}%')にクエリを変更する必要があります。

+0

のみを返し、 "LEEOPARD"も返します。 OPは明白に望んでいなかった... –

0

以下のクエリで試してください。ユーザからどこLOWER( '%{$検索}')OR BINARY LOWER(名)LIKE LOWER( '{$検索}%')OR BINARY LOWER(名)LIKE BINARY LOWER(名)

SELECT * FROM user where BINARY LOWER(name) LIKE LOWER('% {$search} %') OR LOWER(name) LIKE LOWER('{$search} %') OR LOWER(name) LIKE LOWER('% {$search}') 
関連する問題