354

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

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

PHPでは、関数は呼び出されるsubstr($haystack, $needle)ので、おそらく:

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

7 に答える 7

519

実際には非常に簡単です:

SELECT *
FROM `table`
WHERE `column` LIKE '%{$needle}%'

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

于 2010-04-08T17:56:16.173 に答える
178

使用する:

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

参照:

于 2010-04-08T17:56:55.907 に答える
60
WHERE `column` LIKE '%$needle%'
于 2010-04-08T17:56:14.197 に答える
41

私はLOCATEmysqlで使用しています:

LOCATE(substr,str), LOCATE(substr,str,pos)

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

あなたの場合:

SELECT * FROM `table`
WHERE LOCATE('{$needle}', `column`) > 0
于 2013-02-26T06:47:07.773 に答える
13

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

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

で始まる文字列を探していた場合$needle:

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

で終わる文字列を探していた場合$needle:

... WHERE column LIKE '%{$needle}'
于 2012-10-16T16:18:54.187 に答える
5

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

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

最初に行う:

$needle = mysql_real_escape_string($needle);

したがって、攻撃の可能性を防ぎます。

于 2013-08-27T15:20:25.900 に答える
3

あなたはおそらく機能を探していfind_in_setます:

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

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

于 2013-06-10T11:13:39.300 に答える