如何使用PHP和MySQL创建标签系统?

13

我想知道如何在PHP和MySQL数据库中创建一个标签系统。我的初步想法是在存储文章的表中创建一个名为 "tags" 的行,并以逗号分隔列出标签。但我不确定如何创建一个查询来搜索匹配的标签,也不想每次有人点击标签时都要查询每篇文章。有谁能帮忙吗?


6
我建议您了解“数据库规范化”。一个好的开始是查看http://en.wikipedia.org/wiki/Database_normalization。 - Marc B
2个回答

40
您在描述文章和标签之间的多对多关系。您需要使用一个中间连接表来解决这个关系。

enter image description here

现在,要找到与所选标签匹配的所有文章:
SELECT a.article_title
    FROM Tag t
        INNER JOIN Article_Tag_Xref atx
            ON t.tag_id = atx.tag_id
        INNER JOIN Article a
            ON atx.article_id = a.article_id
    WHERE t.tag_name = 'SelectedTagName'

1
如何查找与给定列表中所有标签匹配的所有文章? - Samuel
似乎有三种方法可以完成这个任务:1)反规范化表,所有标签都作为主表的一部分;2)两个表,主表具有项目ID,第二个表具有项目ID和标签,其中项目ID和标签都被索引;3)您所描述的结构。 - PirateApp

2

tbl_articles拥有articleID等字段。

tbl_tags拥有tagID等字段。

tbl_taggedarticles拥有taggedArticleID、articleID、tagID等字段。

SELECT articleID FROM tbl_taggedarticles WHERE tagID = "searchedID"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接