Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erhalten Sie alle Beiträge, die ein bestimmtes Tag haben, und behalten Sie alle anderen Tags in den Ergebnissen mit SQL bei

Ich gehe davon aus, dass Sie gerne zwei Anfragen an die Datenbank senden.

Rufen Sie zuerst alle Posts für ein bestimmtes Tag ab:

SELECT * FROM blog_posts bp 
WHERE EXISTS (SELECT * FROM blog_tags bt INNER JOIN
               tags t ON t.id = bt.tag_id
              WHERE bp.id = bt.post_id
               AND t.tag = @SearchTag)

Zweitens möchten Sie Tags, schätze ich, über Posts mit dem verknüpfen, nach dem Sie suchen:

SELECT * FROM tags t
WHERE EXISTS ( -- Here we link two tags via blog_tags
               SELECT * FROM blog_tags bt1 INNER JOIN
               blog_tags bt2 ON bt1.post_id = bt2.post_id
                     AND bt1.tag_id != bt2.tag_id INNER JOIN
               tags t ON t.id = bt1.tag_id
               WHERE t.tag = @SearchTag
                  AND t.id = bt2.tag_id
)