[RESOLU] Problème avec requête SQL et "IN"

Petit nouveau ! | 5 Messages

28 déc. 2017, 15:26

Bonjour, il m'arrive quelque chose que je n'arrive à m'expliquer.... J'ai une requête assez longue, mais pour simplifier j'ai isolé la partie qui me pose problème.

J'ai une BDD dans laquelle j'ai une valeur varChar qui est : 2,9,31

Je veux faire un sélect de toutes les entrées qui contiennent 2, mais pas 12,22,etc etc...

J'ai donc la requête suivante :

Code : Tout sélectionner

SELECT * FROM `mabase` WHERE colonne IN ( '2' , '%,2' , '2,%' , '%,2,%' )
Cette colonne ne renvoie aucun résultat. par contre si j'enlève les quote du premier 2, ça fonctionne :

Code : Tout sélectionner

SELECT * FROM `mabase` WHERE colonne IN ( 2 , '%,2' , '2,%' , '%,2,%' )

Ca fonctionne avec la version "lourde" :

Code : Tout sélectionner

SELECT * FROM `mabase` WHERE colonne = '2' OR colonne LIKE '%,2' OR colonne LIKE '2,%' OR colonne LIKE '%,2,%'

Je veux réussir à passer ma requête avec le "IN" car c'est en fait la petite partie d'une très longue requête avec plein de AND, et je voulais pas commencer à me perdre avec des AND et des OR dans tous les sens, le "IN" me paraissait bien...

Pour finir, l'exemple est en requête "sql direct" mais en vrai c'est dans une requête préparée, donc le "2" étant remplacé par le contenue de mon $_POST['machin'], je ne vois pas comment "jouer" avec les simple quote de la seule reqûte "sql brute" qui fonctionne :

Code : Tout sélectionner

(...) AND a.c1 LIKE :fi_dep AND b.c2 IN (:fi_ge , :fi_ge2 , :fi_ge3 , :fi_ge4) AND b.c3 LIKE (...)

Merci d'avance :)

Petit nouveau ! | 5 Messages

28 déc. 2017, 18:13

Bon, j'ai trouvé tout seul....
L'explication, si ça peut aider quelqu'un plus tard :
Le 'IN' équivaut à : colonne = parametre, et pas colonne LIKE parametre...

Donc seule solution, la version 'lourde' entre parenthèse, à savoir :

Code : Tout sélectionner

(...) AND a.c1 LIKE :fi_dep AND (b.c2 LIKE :fi_ge OR b.c2 LIKE :fi_ge2 OR b.c2 LIKE :fi_ge3 OR b.c2 LIKE :fi_ge4) AND b.c3 LIKE (...)
Bonne journée