2011-03-28 5 views
0

Voici une situation; dans une colonne de table/s nommé foo J'ai dynamiquement implode() d données de varchar comme 1,2,3,4 ou 2,3 ou 1,3 et ainsi de suite.Requête MySql compliquée utilisant l'état IN()

Plus tard, dans le code, il est reconnu chaîne $ce = 3; avant requête bien sûr, prêt à tirer des ressources de foo colonnes contenant le numéro 3.

Maintenant, je suis à l'aide suivante, sélectionnez ..

SELECT DISTINCT place FROM xx WHERE she = 1 
         AND foo IN ($ce) 

Ce ne le fait pas.

SELECT DISTINCT place FROM xx WHERE she = 1 
         AND $ce IN (foo) 

ne le fait pas aussi.

Où est-ce que je me trompe? Des idées?

+0

> Des idées? - normalisation des données;) – Devart

Répondre

0

Ce n'est pas ce à quoi la clause IN est destinée.

Au lieu de cela, utilisez la fonction instr, comme suit:

SELECT DISTINCT place FROM xx WHERE she = 1 AND instr(foo, $ce) > 0 

Vous pouvez également utiliser des expressions régulières: http://dev.mysql.com/doc/refman/5.0/en/regexp.html

+0

Thaaaaaaaaaaaaaaaaaaanks Squawknull :) – Xfile

+0

Aussi, la fonction FIND_IN_SET peut être utilisée ici. – Devart

0
SELECT DISTINCT place FROM xx WHERE she = 1 AND FIND_IN_SET('$ce',foo) 

Cela devrait travailler pour vous.

+0

Pourquoi cela devrait-il fonctionner? Que fait-il? – markus