我想为博客及其文章创建一个标记系统;作为StackOverflow的标记系统的问题。
数据库结构
Table - articles
Fields - article_id, article_title, article_content
Table - article_tags
Fields - tag_id, article_id, tag_name
如果用户在输入中输入标签;假设他们输入了以下标签:
-
php
-
mysql
-
database structure
我想了解如何将以下标签转换为数组,然后将每个标签插入新的值行,如下所示。
article_Tags
tag_id | article_id | tag_name
1 1 php
2 1 mysql
3 1 database structure
我想让 PHP 用逗号分解每个标签,并将其单独插入到新的行值中。
我该如何实现此目的?我是否需要 foreach 和 explode() 来分解每个标签?
下表结构是否似乎比上面的结构更好?
Table - article
Fields - article_id, article_title, article_content
Table - article_tags
Fields - article_id, tag_id
Table - tags
Fields - tag_id, tag_name
如果是这样,我该如何将每个标签输入数据库,我是否需要 explode() 以及第一个表结构?
你的第二个结构更好。这样你存储的数据就少得多了。
最简单的方法是为标签表创建一个 CRUD,在创建帖子表单上显示这些标签,并在提交时将所有内容相应地插入您的文章和article_tags表中。
但你也可以让用户使用一些JavaScript直接从帖子表单中创建标签,然后将这些标签插入数据库,然后再插入到文章和article_tag中。
不要忘记,无论哪种方式,您都需要检查重复项。根据您的示例使用 10 个不同的 php
标签是没有意义的。
这称为多对多关系,最好创建一个中间表。
你可能会问为什么?好吧,让我们尝试一个例子,看看哪个更好。假设您有 100 篇文章,每篇文章有 3 个标签,还有 30 个唯一标签。
第一个版本: article_tags
总共包含 300 个条目,这意味着每个标签名称平均重复 10 次。
第二版: article_tags
将包含相同的 300 个条目,但标记名称不会出现 300 次,而是在tags
表中仅出现 30 次。
第二个版本重复的内容较少,所以你应该这样做。