私はこのクエリを使用してデータを選択しています:
mysql_query("SELECT * FROM products WHERE product_name LIKE '%".$search."%'");
唯一の問題は、私が望むよりも多くを選択することです。
たとえば、製品「BLA」を選択しますが、クエリでは製品「BLABLA」も選択します。明確にするために、「製品1」を選択する場合、クエリで「製品11」を選択しないようにします。
誰もそれを管理する方法を知っていますか?
ありがとう。
Wordの境界で検索したいだけですか?その場合、粗雑なバージョンは次のようになります。
SELECT * FROM products WHERE product_name LIKE "% foo %";
または、少し賢くて、次のREGEXP
でWordの境界を探すこともできます。
SELECT * FROM products WHERE product_name RLIKE "[[:<:]]foo[[:>:]]";
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
効率について、またはこれがすべてのケースをカバーするかどうかは定かではありませんので、これが本当に非効率的であるか、あまりにも洗練されていない場合は、お気軽に投票してください。
SELECT *
FROM products
WHERE product_name = 'BLA'
正確なBLA
を選択します
SELECT *
FROM products
WHERE product_name LIKE 'BLA%'
BLADDER
とBLACKBERRY
は選択しますが、REBLAND
は選択しません
BLA
を文字列の最初の単語として選択するには、次を使用します。
SELECT *
FROM products
WHERE product_name RLIKE '^Bla[[:>::]]'
AND product_name LIKE 'Bla%'
product_name
にインデックスがある場合、2番目の条件によりクエリのパフォーマンスが向上する場合があります。
正規表現を使用してみてください。
SELECT
*
FROM
`products`
WHERE
product_name regexp '(^|[[:space:]])BLA([[:space:]]|$)';
LIKE
キーワードを削除し、=
を使用して完全一致させます
[〜#〜] edit [〜#〜]
mysql_real_escape_string を使用してユーザー入力をエスケープすることを忘れないでください。
$search=mysql_real_escape_string($search);
mysql_query("SELECT * FROM products WHERE product_name='".$search."'");
次に、LIKEを使用せずに、平等を検索します。
すなわち。
mysql_query("SELECT * FROM products WHERE product_name = '".$search."'");
ところで、クエリで使用する前に$ searchをサニタイズ/エスケープしてください。
このような選択クエリを使用できます。cakePHPでも使用できます。
Select * from `users` where username COLLATE latin1_general_cs LIKE '%$email%'
等しい(=)を使用しますか?
mysql_query("SELECT * FROM products WHERE product_name = '".$search."'");
完全に一致する単語を探している場合は、LIKE
を使用しないでください。
編集:それは少し物事をクリアします。検索語の後にスペースを追加するだけです。または、検索用語にハイフン(-)が常に含まれている場合は、ハイフン(-)を追加します。
mysql_query("SELECT * FROM products WHERE product_name LIKE '".$search." -%'");