IN clause

grab all tags :)

Le problème exposé dans ce sujet a été résolu.

Bonjour, J'ai un problème de logique avec MySQL et la clause in : J'ai un système de tags rattacher un un objet x ( ManyToMAny) que je filtres via ces tags. Pas de problèmes ça marche. Le hic, c'est qu'il me récupérer un tag (ou les tags) sur lequel je base mon filtre. Logique ! Mais je veux récupéré tous mes tags qui sont liée à x et pas seulement celui sur lequel je filtre.

1
SELCT * FROM x LEFT JOIN Tag t on t.id = x.tag_id WHERE t.id IN (5)

Imaginons que x a les tags : 1,2,3,4 et 5, je me retrouve donc donc avec le tag 5 seulement, mais moi je les veux tous. Pourquoi ? Parce que !!!!!!:p

Une petit idées pour récupérer tous les enregistrement liée de cette façon ?

Merci de votre aide (et explication sur la logique à appliquer)

+0 -0

tester, mais pas approuvé . :( Ou j'ai pas compris un truc !

1
SELCT * FROM x LEFT JOIN Tag t on t.id = x.tag_id WHERE t.id IN (5) HAVING COUNT(*) = 5

?

+0 -0

Salut !

Le souci que tu as je pense, c'est que tu fais un LEFT JOIN, donc tu mets le poids sur la table X, et non sur les tags. Donc tu récupèreras tous les X, mais avec tous leurs tags, pas tous les tags.

Comme il n'est pas possible de faire un RIGHT JOIN avec Doctrine (parce que la partie à droite peut être nulle), il te faudrait partir de l'entité TAG et récupérer avec LEFT JOIN les X liés. Pas forcément pratique, mais je ne vois pas d'autre possibilité.

Edit

Ouais, mais non.

Tu peux éventuellement joindre deux fois sur la même liaison, une fois pour "filtrer", une fois pour récupérer les tags liés.

+1 -0

Le solution la plus simple est de re-joindre les tables avec comme condition no in pour la deuxième jointure. Merci, Ymox.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte