Voici mon problème. J'ai une table plusieurs à plusieurs appelée "user_has_personalities". Dans ma demande, les utilisateurs peuvent avoir de nombreuses personnalités et une personnalité peut appartenir à de nombreux utilisateurs. P>
La table a deux colonnes entier, user_id et personnalité_id. p>
Ce que je dois faire, c'est obtenir tous les utilisateurs qui ont au moins toutes les personnalités (un ensemble de personnalités de la taille variable) que je fournis à la requête. P>
Pour un exemple, j'aimerais obtenir tous les utilisateurs possédant des personnalités avec IDS 4, 5, 7, mais peuvent également avoir d'autres personnalités. Mais j'ai besoin de la requête pour travailler pour un nombre variable d'identifiants de personnalité recherchés, comme 4, 5, 7, 9, 10 pour un exemple. P>
Des idées? P>
3 Réponses :
Cette requête fait le travail:
select user_id from user_has_personalities where personality_id in (4,5,7) group by user_id having count(*) = 3
Cela dit simplement s'ils ont l'un des personnalités_ids. La question dit explicitement tous les identifiants.
@Évan: cette requête indique si l'utilisateur dispose de tous les identifiants.
Je vois ce que tu fais. Joli.
C'est le moyen le plus rapide et le plus élégant de le faire! Super!!
SELECT user_id FROM users uhpo WHERE ( SELECT COUNT(*) FROM perslist p JOIN user_has_personalities uhpi ON uhpi.user_id = uhpo.user_id AND uhpi.personality_id = p.id ) = ( SELECT COUNT(*) FROM perslist )
+1 pour la maîtrise générale et l'assistant-Ness :) Quassnoi, j'aime votre blog et je vous ai lié. J'aimerais encore plus que votre blog si vous ouvriez des commentaires, mais il est évident que votre prérogative de le laisser tel quel. Quoi qu'il en soit, acclamez et continuez-le :)
@Roland: Tous les articles de la catégorie Divers code> a activé des commentaires activés.
SELECT a.user_id FROM user_has_personalities a JOIN user_has_personalities b ON a.user_id = b.user_id AND b.personality_id = 5 JOIN user_has_personalities c ON a.user_id = c.user_id AND b.personality_id = 7 WHERE a.personality_id = 4 It would be easy enough to generate this list programatically, but it's not exactly as easy as supplying a set. On the other hand, it is efficient.