Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Mysql muitos para muitos consulta de relacionamento. Como obter todas as tags de postagens filtradas?


Bem, isso é o melhor que consigo pensar às 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))

Os (1, 2) são as tags que você está procurando e a contagem, é claro, terá que corresponder à quantidade de tags que você está usando para filtrar.

Aqui está um exemplo (Observe que alterei um pouco os dados)