Eu tenho tentado 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
), assim:
mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");
No PHP, a função é chamada substr($haystack, $needle)
, então talvez:
WHERE substr(`column`, '{$needle}')=1
php
mysql
sql
string-comparison
arik
fonte
fonte
column LIKE '...'
ele é insensível caso, comcolumn LIKE BINARY '...'
ele é sensível a maiúsculasLIKE
seja proposto verificar qualquer substring, pois esse operador usa dois caracteres curinga:%
e_
. Isso significa que, se sua string $ needle contiver um desses caracteres especiais, os resultados não serão os esperados. (-1) para esta resposta e (+1) para a resposta INSTR.Usar:
Referência:
fonte
LIKE %...%
não usará um índice se houver algum, portanto eles devem ser equivalentes;LIKE ...%
usaria um índice se presente. Se o desempenho for uma preocupação real, a Pesquisa de Texto Completo (STF) seria uma abordagem melhor.like
operador. Cominstr
uma frase pode ser ordenada desta formaselect * from table order by instr(col1,"mystring")
fonte
O meu está usando
LOCATE
no mysql:Essa função é segura para vários bytes e diferencia maiúsculas de minúsculas se pelo menos um argumento for uma sequência binária.
No seu caso:
fonte
Além da resposta de @WoLpH.
Ao usar a
LIKE
palavra-chave, você também pode limitar em qual direção a string corresponde. Por exemplo:Se você estava procurando por uma sequência que comece com o seu
$needle
:Se você estava procurando uma sequência que termina com
$needle
:fonte
esteja ciente de que isso é perigoso:
faça primeiro:
para evitar possíveis ataques.
fonte
mysql_real_escape_string
será preterido em versões futuras do PHP.$stmt = $dbh->prepare("Where 'column' LIKE '{:needle}'"); $stmt->bindParam(':needle', $needle); $stmt->execute();
Você provavelmente está procurando
find_in_set
função:Esta função atua como
in_array
função no PHPfonte