La requête MySQL La chaîne contient

J’ai essayé de comprendre comment faire une requête avec MySQL pour vérifier si la valeur (ssortingng $haystack ) dans une colonne donnée contient certaines données (ssortingng $needle ), comme ceci:

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

En PHP, la fonction s’appelle substr($haystack, $needle) , donc peut-être:

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

Assez simple en fait:

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

Le % est un caractère générique pour tout caractère. Notez que cela peut être lent sur des ensembles de données très volumineux, donc si votre firebase database augmente, vous devrez utiliser des index de texte intégral.

Utilisation:

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

Référence:

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

Le mien utilise LOCATE dans mysql:

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

Cette fonction est sûre sur plusieurs octets et ne fait la distinction entre les majuscules et les minuscules que si au moins un argument est une chaîne binary.

Dans ton cas:

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

En plus de la réponse de @WoLpH.

Lorsque vous utilisez le mot clé LIKE vous avez également la possibilité de limiter la direction dans laquelle la chaîne correspond. Par exemple:

Si vous cherchiez une chaîne commençant par votre $needle :

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

Si vous cherchiez une chaîne qui se termine par $needle :

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

Sachez que c’est dangereux:

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

faire en premier:

 $needle = mysql_real_escape_ssortingng($needle); 

donc cela empêchera les attaques possibles.

Vous recherchez find_in_set fonction find_in_set :

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

Cette fonction agit comme la fonction in_array en PHP