用于标记系统的MySQL查询,仅选择使用的标记

时间:2011-09-29 23:33:38

标签: php mysql tags

我有一个用PHP和MySQL实现的标记系统,包含以下表格:

表:blog_tags

  • TAG_ID
  • TAG_NAME

表:blog_tags_assoc

  • tag_assoc_id
  • 的article_id
  • TAG_ID

表:blog_articles

  • 的article_id
  • ARTICLE_TITLE
  • article_content

我使用多对多关系将它们全部链接起来 (参考类似的东西:How to store tags in MySQL tags, one field in total or one filed for each tag?

我现在要做的是创建一个MySQL查询,从blog_tags中选择blog_articles中文章实际引用的所有标签。

到目前为止,我知道“HAVING”是我可以使用的东西......但我不确定如何? 任何想法或建议都会受到欢迎。谢谢!

2 个答案:

答案 0 :(得分:2)

如果您只想知道文章中使用过的标签,那么您可以这样做:

SELECT DISTINCT tag_id, tag_name
FROM blog_tags
INNER JOIN blog_tags_assoc USING ( tag_id );

答案 1 :(得分:1)

这将获得标签名称以及已使用标签的文章计数。

SELECT
    `blog_tags`.`tag_name`,
    count(*) AS `blog_article_count`
FROM `blog_tags`
    JOIN `blog_tags_assoc`
        ON `blog_tags`.`tag_id`=`blog_tags_assoc`.`tag_id`
    JOIN `blog_articles`
        ON `blog_articles`.`article_id`=`blog_tags_assoc`.`article_id`
GROUP BY `blog_tags`.`tag_name`