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
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.
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)