A String da consulta MySQL contém

Eu tentei descobrir como posso fazer uma consulta com o MySQL que verifica se o valor (string $haystack ) em uma determinada coluna contém certos dados (string $needle ), como este:

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

Em PHP, a function é chamada de substr($haystack, $needle) , então talvez:

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

Bastante simples na verdade:

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

O % é um curinga para qualquer personagem. Observe que isso pode ficar lento em conjuntos de dados muito grandes, então, se seu database crescer, você precisará usar índices de texto completo.

Usar:

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

Referência:

  • INSTR
 WHERE `column` LIKE '%$needle%' 

O meu está usando LOCATE no mysql:

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

Esta function é segura em vários bytes e apenas diferencia maiúsculas de minúsculas somente se pelo menos um argumento for uma string binária.

No seu caso:

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

Além da resposta de @WoLpH.

Ao usar a palavra-chave LIKE você também tem a capacidade de limitar a direção que a corda corresponde. Por exemplo:

Se você estivesse procurando uma string que comece com sua $needle :

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

Se você estivesse procurando por uma string que termina com a $needle :

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

esteja ciente de que isso é perigoso:

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

faça primeiro:

 $needle = mysql_real_escape_string($needle); 

então evitará possíveis ataques.

Você provavelmente está procurando a function find_in_set :

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

Esta function funciona como in_array function em PHP