web-dev-qa-db-ja.com

MySQLクエリ文字列

次のように、特定の列の値(文字列$haystack)に特定のデータ(文字列$needle)が含まれているかどうかを確認するMySQLでクエリを作成する方法を見つけようとしています。

mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");

PHPでは、この関数はsubstr($haystack, $needle)と呼ばれています。

WHERE substr(`column`, '{$needle}')=1
256
arik

実はかなり単純です。

mysql_query("
SELECT *
FROM `table`
WHERE `column` LIKE '%{$needle}%'
");

%は任意の文字のワイルドカードです。非常に大きなデータセットではこれが遅くなる可能性があるので注意してください。データベースが大きくなったらフルテキストインデックスを使う必要があります。

374
Wolph

つかいます:

SELECT *
  FROM `table`
 WHERE INSTR(`column`, '{$needle}') > 0

参照:

126
OMG Ponies
WHERE `column` LIKE '%$needle%'
46
chris

Mineはmysqlで LOCATE を使用しています。

LOCATE(substr、str)、LOCATE(substr、str、pos)

この関数はマルチバイトセーフであり、少なくとも1つの引数がバイナリ文字列の場合にのみ大文字と小文字が区別されます。

あなたの場合:

mysql_query("
SELECT * FROM `table`
WHERE LOCATE('{$needle}','column') > 0
");
21
risnandar

@WoLpHからの回答に加えて。

LIKEキーワードを使用すると、文字列が一致する方向を制限することもできます。例えば:

あなたの$needleで始まる文字列を探していたら:

... WHERE column LIKE '{$needle}%'

$needleで終わる文字列を探しているなら、

... WHERE column LIKE '%{$needle}'
10
Joshua Powell

これは危険であることに注意してください。

WHERE `column` LIKE '%{$needle}%'

最初にやる:

$needle = mysql_real_escape_string($needle);

だからそれは可能性のある攻撃を防ぐでしょう。

3

あなたはおそらく find_in_set functionを探しています。

Where find_in_set($needle,'column') > 0

この関数は、PHPの in_array functionのように機能します。

0
Andres