Question

Je suis en train d'utiliser la valeur d'un autre champ à l'intérieur d'un IN.

SELECT types.id, title, auth_users.types
FROM types
LEFT JOIN auth_users ON auth_users.id IN (8,9)
WHERE types.id IN (1,2,3)
GROUP BY types.id

Travaux

SELECT types.id, title, auth_users.types
FROM types
LEFT JOIN auth_users ON auth_users.id IN (8,9)
WHERE types.id IN (auth_users.types)
GROUP BY types.id

Ne fonctionne pas

http://pastebin.com/m76ae0596 Plus d'informations peuvent être trouvées ici

auth_users.types = 1,2,3
Était-ce utile?

La solution

Vous devez utiliser FIND_IN_SET - voir cette question: MySql: Sélectionnez instruction à l'aide opérateur IN

Autres conseils

Malheureusement, IN (...) ne tentera pas d'analyser une valeur varchar-champ pour extraire les valeurs que vous voulez faire correspondre.

Il vérifie simplement essentiellement "types.id" est l'un des "1, 2, 3" (ie. Pas 1, 2 ou 3, mais la seule valeur réelle "1, 2, 3".)

Une façon de résoudre ce serait d'avoir une fonction dans la base de données qui renvoie un resultset, et prend cette valeur varchar dans, parse, et renvoie 3 lignes pour votre exemple.

Autre que cela, vous devez soit réécrire à utiliser LIKE (qui interprétera horriblement), ou vous devez analyser ces valeurs vous-même et placez le résultat dans le SQL directement.

sous-requêtes ligne :

 SELECT column1,column2,column3
   FROM t1
   WHERE (column1,column2,column3) IN
         (SELECT column1,column2,column3 FROM t2);

EDIT:

En fait, en regardant votre pastebin, entreposez-vous « 1,2,3 » en une seule rangée en tant que varchar? Cela ne va pas au travail.

Je suppose qu'il est à la recherche d'un simple JOIN

LEFT JOIN auth_users SUR types.id = auth_users.types

OÙ auth_users.id IN (8,9)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top