Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête de relation plusieurs à plusieurs MySQL. Comment obtenir toutes les balises des publications filtrées ?

Eh bien, c'est le mieux auquel je puisse penser à 4h30 :

SELECT distinct tag_id FROM
    (SELECT pt1.post_id FROM pt1
    INNER JOIN tags t1 ON (pt1.tag_id = t1.id)
    WHERE t1.id IN (1, 2)
    GROUP BY pt1.post_id
    HAVING COUNT(DISTINCT t1.id) = 2) MatchingPosts
INNER JOIN pt2 ON (MatchingPosts.post_id = pt2.post_id)
WHERE (pt2.tag_id NOT IN (1, 2))

Les (1, 2) sont les balises que vous recherchez et le nombre, bien sûr, devra correspondre à la quantité de balises que vous utilisez pour filtrer.

Voici un exemple (Remarquez que j'ai légèrement modifié les données)