J'ai actuellement la ligne suivante dans ma table: et j'essaie d'implémenter l'instruction SELECT suivante: P> SELECT usrID, usrFirst, usrLast, usrEmail
FROM tblUsers
WHERE usrID NOT IN
(
SELECT users.usrID
FROM
`course_data` courses,
`tblUsers` users
WHERE
days IN ('$day')
)
GROUP BY usrID
ORDER BY usrID
5 Réponses :
Supprimer les guillemets dans la déclaration dans. La syntaxe est la suivante: et non comme vous l'avez utilisé p> Voir aussi le Documentation sur, il y a plus d'exemples. P> P>
En fait, désolé, j'ai besoin de clarification. Je fais quelque chose de mal ici. Si j'utilise: où des jours dans (1), il l'enlève correctement et renvoie un résultat vide. Mais si j'utilise: où des jours de (3), il ne renvoie pas une requête vide. Je penserais qu'il devrait supprimer la requête parce que '3' est dans la requête? Des idées?
Je suppose que c'est parce qu'il convertit "1,3,5" dans un int (s'arrêter à la virgule), puis voit qu'elle correspond.
Je ne sais pas pourquoi ce n'est pas la réponse acceptée pour le scénario donné dans le poste d'origine - bien que j'accepte que la réponse acceptée fournit des conseils sur la correction des mauvaises habitudes de codage.
jours ne tient pas une liste de chaînes. Il contient une seule chaîne. La chaîne "1,3,5" est-elle dans l'une des cordes de {'1'}? Clairement la réponse est non. Soit des jours de refacteur dans une table différente ou être prêt à faire plus de manipulation de chaîne p>
Vous devez utiliser Le comme Code> Mot-clé
Pour faire une correspondance partielle du champ de caractère:
select cd.user_id from course_data as cd where cd.user_id not in ( select course_days.user_id from course_days where course_days.user_id = cd.user_id and course_days.day_number = 1 )
Merci. Vous avez raison de changer la structure. Je suis allé de l'avant et je l'ai fait. Merci.
"Donc, c'est une meilleure estimation": une autre idée (faisable possible) est d'utiliser une sous-requête non existante comme décrit à dev.mysql.com/doc/refman/5.1/fr/... au lieu de x non in (sous-requête) code) code) >
% comme% donneraient 11 pour une recherche de 1, donc cela ne convient pas vraiment, donc cette réponse ne s'applique pas vraiment à la question initiale. La réponse de Theoméga semble plus applicable à l'OP.
Si je comprends votre question correctement, vous souhaitez que le contenu du champ Varcharne soit traité comme une liste séparée par des virgules et testez si cette liste ne contient pas de valeur certaine. Pour cela, vous avez besoin du Find_in_set (str , Strlist) fonction.
Mais gardez à l'esprit que MySQL ne peut pas utiliser un index dans ce cas et votre requête aura toujours besoin d'une table complète. Il peut être préférable de ne pas stocker de données structurées (et de faire des comparaisons sur les éléments simples) dans une seule colonne, mais d'utiliser une autre table et une jointure comme a été suggérée dans d'autres réponses. P>
Je pense que la requête que vous voulez est: mais vous devez envisager sérieusement de normaliser la base de données, de sorte que chaque jour a sa propre ligne. P> P>