web-dev-qa-db-fra.com

Requête MySQL Chaîne contient

J'ai essayé de comprendre comment faire une requête avec MySQL qui vérifie si la valeur (chaîne $haystack) d'une certaine colonne contient certaines données (chaîne $needle), comme ceci:

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

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

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

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 de très grands ensembles de données. Par conséquent, si votre base de données s'agrandit, vous devrez utiliser des index en texte intégral.

391
Wolph

Utilisation:

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

Référence:

130
OMG Ponies
WHERE `column` LIKE '%$needle%'
47
chris

Le mien utilise LOCATE dans mysql:

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

Cette fonction est multi-octets sécurisée et est sensible à la casse uniquement si au moins un argument est une chaîne binaire.

Dans ton cas:

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

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 cherchez une chaîne qui se termine par le $needle:

... WHERE column LIKE '%{$needle}'
10
Joshua Powell

sachez que c'est dangereux:

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

faire en premier:

$needle = mysql_real_escape_string($needle);

cela empêchera les attaques éventuelles.

3
Alejandro Moreno

Vous recherchez probablement find_in_set fonction:

_Where find_in_set($needle,'column') > 0
_

Cette fonction agit comme in_array fonction en PHP

0
Andres