2010-09-17 31 views
0

Je sais que ce n'est pas une technique appropriée pour avoir une structure de table MySQL en tant que telle, mais je dois travailler avec tel. Le problème est que le champ dans la table a une valeur avec des entiers séparés par des virgules, comme "1,3,5,7,10" et je veux que la requête retourne des lignes, dans lesquelles field a un à la requête passée le numéro, comme:MySQL SELECT OERE 'a' IN (`field`)

SELECT * FROM `table` WHERE '5' IN (`field_in_table`) 

Cependant, cela ne fonctionne pas, si, dans ce cas, « 5 » est pas le premier numéro dans le champ. Tout conseille, comment résoudre ce problème?

Merci à l'avance, Cordialement, Jonas

Répondre

4

Jetez un oeil à

FIND_IN_SET

Renvoie une valeur dans la plage de 1 à N si la chaîne str est dans la chaîne liste strlist composée de N sous-chaînes. Une liste de chaînes est une chaîne composée de sous-chaînes séparées par caractères ",". Si le premier argument est une chaîne constante et le second une colonne de type SET, la fonction FIND_IN_SET() est optimisée pour utiliser l'arithmétique des bits. Retourne 0 si str n'est pas dans strlist ou si strlist est la chaîne vide .

+0

Merci - c'est la fonctionnalité que je cherchais. Je simplyg oublié cette commande :) – flyeris

1

Vous pouvez utiliser WHERE field_in_table LIKE '%5%' à la place. Bien sûr, le problème serait, '1,59,98' reviendrait aussi bien.

+2

Il ne fonctionnera pas, car il retournera non plus ce sera 50 ou 5: S – flyeris

+0

Mieux faire que « %, 5,% » si vous êtes à la recherche pour « 5 » seulement et pas '25' ou '51' aussi. – Filburt

1
SELECT * FROM table WHERE field_in_table LIKE '%5'"); 

devrait fonctionner

1

Vous pouvez essayer

SELECT * 
    FROM table 
    WHERE '%,5,%' LIKE field_in_table OR 
      '%,5' LIKE field_in_table OR 
      '5,%' LIKE field_in_table; 

Une meilleure approche pourrait consister à utiliser des expressions régulières, un sujet sur lequel je ne suis pas une autorité.

0
SELECT * 
FROM table 
WHERE FIELD LIKE '%,5,%' OR 
     FIELD LIKE '5,%' OR 
     FIELD LIKE '%,5'