He estado tratando de descubrir cómo puedo hacer una consulta con MySQL que verifique si el valor (cadena $haystack
) en una determinada columna contiene ciertos datos (cadena $needle
), como este:
mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");
En PHP, la función se llama substr($haystack, $needle)
, así que tal vez:
WHERE substr(`column`, '{$needle}')=1
php
mysql
sql
string-comparison
arik
fuente
fuente
column LIKE '...'
mayúsculas y minúsculas, concolumn LIKE BINARY '...'
mayúsculas y minúsculasLIKE
se proponga verificar cualquier subcadena ya que este operador utiliza dos caracteres comodín:%
y_
. Esto significa que si su cadena $ needle contiene uno de estos caracteres especiales, los resultados no son los esperados. (-1) para esta respuesta y (+1) para la respuesta INSTR.Utilizar:
Referencia:
fuente
LIKE %...%
no usará un índice si hay uno presente, por lo que deberían ser equivalentes;LIKE ...%
usaría un índice si está presente. Si el rendimiento es una preocupación real, la búsqueda de texto completo (FTS) sería un mejor enfoque.like
operador. Coninstr
una frase se puede ordenar asíselect * from table order by instr(col1,"mystring")
fuente
El mío está usando
LOCATE
en mysql:Esta función es segura para varios bytes y distingue entre mayúsculas y minúsculas solo si al menos un argumento es una cadena binaria.
En tu caso:
fuente
Además de la respuesta de @WoLpH.
Al usar la
LIKE
palabra clave, también tiene la capacidad de limitar en qué dirección coincide la cadena. Por ejemplo:Si estabas buscando una cadena que comience con tu
$needle
:Si estabas buscando una cadena que termina con
$needle
:fuente
Tenga en cuenta que esto es peligroso:
hacer primero:
así evitará posibles ataques.
fuente
mysql_real_escape_string
quedará en desuso en futuras versiones de PHP.$stmt = $dbh->prepare("Where 'column' LIKE '{:needle}'"); $stmt->bindParam(':needle', $needle); $stmt->execute();
Probablemente estés buscando la
find_in_set
función:Esta función actúa como
in_array
función en PHPfuente