web-dev-qa-db-ja.com

MySQL-LIKEを使用して完全に一致する単語を検索する方法

私はこのクエリを使用してデータを選択しています:

mysql_query("SELECT * FROM products WHERE product_name LIKE '%".$search."%'");

唯一の問題は、私が望むよりも多くを選択することです。

たとえば、製品「BLA」を選択しますが、クエリでは製品「BLABLA」も選択します。明確にするために、「製品1」を選択する場合、クエリで「製品11」を選択しないようにします。

誰もそれを管理する方法を知っていますか?

ありがとう。

27
Mike

Wordの境界で検索したいだけですか?その場合、粗雑なバージョンは次のようになります。

SELECT * FROM products WHERE product_name LIKE "% foo %";

または、少し賢くて、次のREGEXPでWordの境界を探すこともできます。

SELECT * FROM products WHERE product_name RLIKE "[[:<:]]foo[[:>:]]";
38
James C

Googleでこの質問を見つけたので、一部の人々はまだこれにつまずくかもしれないと思うので、ここに私のかなりエレガントな試みがあります:

SELECT * FROM products
WHERE product_name LIKE 'BLA %' #First Word proceeded by more words
OR WHERE product_name LIKE '% BLA' #Last Word preceded by other words
OR WHERE product_name LIKE '% BLA %' #Word in between other words
OR WHERE product_name = 'BLA'; #Just the Word itself

効率について、またはこれがすべてのケースをカバーするかどうかは定かではありませんので、これが本当に非効率的であるか、あまりにも洗練されていない場合は、お気軽に投票してください。

8
PulpDood
SELECT  *
FROM    products
WHERE   product_name = 'BLA'

正確なBLAを選択します

SELECT  *
FROM    products
WHERE   product_name LIKE 'BLA%'

BLADDERBLACKBERRYは選択しますが、REBLANDは選択しません

BLAを文字列の最初の単語として選択するには、次を使用します。

SELECT  *
FROM    products
WHERE   product_name RLIKE '^Bla[[:>::]]'
        AND product_name LIKE 'Bla%'

product_nameにインデックスがある場合、2番目の条件によりクエリのパフォーマンスが向上する場合があります。

7
Quassnoi

正規表現を使用してみてください。

SELECT 
    *
FROM
    `products`
WHERE
    product_name regexp '(^|[[:space:]])BLA([[:space:]]|$)';
5
Faisal

LIKEキーワードを削除し、=を使用して完全一致させます

[〜#〜] edit [〜#〜]

mysql_real_escape_string を使用してユーザー入力をエスケープすることを忘れないでください。

$search=mysql_real_escape_string($search);
mysql_query("SELECT * FROM products WHERE product_name='".$search."'");
1
Shakti Singh

次に、LIKEを使用せずに、平等を検索します。

すなわち。

mysql_query("SELECT * FROM products WHERE product_name = '".$search."'");

ところで、クエリで使用する前に$ searchをサニタイズ/エスケープしてください。

1
wimvds

このような選択クエリを使用できます。cakePHPでも使用できます。

Select * from `users` where username COLLATE latin1_general_cs LIKE '%$email%'
0
Rahul Dhiman

等しい(=)を使用しますか?

mysql_query("SELECT * FROM products WHERE product_name = '".$search."'"); 

完全に一致する単語を探している場合は、LIKEを使用しないでください。

編集:それは少し物事をクリアします。検索語の後にスペースを追加するだけです。または、検索用語にハイフン(-)が常に含まれている場合は、ハイフン(-)を追加します。

mysql_query("SELECT * FROM products WHERE product_name LIKE '".$search." -%'"); 
0
anothershrubery