Php 一篇关于多个类别的文章
我需要添加文章到多个类别 例如,我有文章名“测试文章”,需要将其添加到类别1和类别2中 需要知道如何为此建立到表之间的关系Php 一篇关于多个类别的文章,php,mysql,database-design,Php,Mysql,Database Design,我需要添加文章到多个类别 例如,我有文章名“测试文章”,需要将其添加到类别1和类别2中 需要知道如何为此建立到表之间的关系 注意:过去,我在文章数据库表名“category”中创建行,并添加类别id,如1、2、3,但这会在搜索和列表中产生问题,请帮助我解决这一问题。您在这里有多对多关系:文章可以有多个类别,类别中显然可以有多个文章。如果没有至少一个表来显式存储实体之间的关联,则无法正确表示此关系。此处存在多对多关系:项目可以有多个类别,类别中显然可以有多个项目。如果没有至少一个表来显式存储实体之
注意:过去,我在文章数据库表名“category”中创建行,并添加类别id,如1、2、3,但这会在搜索和列表中产生问题,请帮助我解决这一问题。您在这里有多对多关系:文章可以有多个类别,类别中显然可以有多个文章。如果没有至少一个表来显式存储实体之间的关联,则无法正确表示此关系。此处存在多对多关系:项目可以有多个类别,类别中显然可以有多个项目。如果没有至少一个表来显式存储实体之间的关联,则无法正确表示该属性。您需要三个表:
- 一个表格用于
文章
- 一个表格用于
类别
- 一个将文章链接到类别的表,我们可以称之为
。这张桌子通常被称为acategories\u per\u article
ARTICLES
ID | Name | Description
1 | Fuzz | A fuzzy three
2 | Bizz | A five that means bizznezz
CATEGORIES
ID | Name
1 | Prime numbers
2 | Multiples of five
3 | Smaller than four
CATEGORIES_PER_ARTICLE
ID | ARTICLE_ID | CATEGORY_ID
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1
您将看到第1条(Fuzz)有三个类别,而第2条(Bizz)只有第1类。我们称之为a(或n-to-n,例如在ER或UML中),因为第1篇文章有多个类别,而类别1由多篇文章使用
您可以使用此模式执行所有可能的查询-请随时在注释中询问特定示例(如如何获取所有包含类别1和类别3但不包含类别2的文章)。您需要三个表:
- 一个表格用于
文章
- 一个表格用于
类别
- 一个将文章链接到类别的表,我们可以称之为
categories\u per\u article
。这张桌子通常被称为a
示例数据:
ARTICLES
ID | Name | Description
1 | Fuzz | A fuzzy three
2 | Bizz | A five that means bizznezz
CATEGORIES
ID | Name
1 | Prime numbers
2 | Multiples of five
3 | Smaller than four
CATEGORIES_PER_ARTICLE
ID | ARTICLE_ID | CATEGORY_ID
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1
您将看到第1条(Fuzz)有三个类别,而第2条(Bizz)只有第1类。我们称之为a(或n-to-n,例如在ER或UML中),因为第1篇文章有多个类别,而类别1由多篇文章使用
您可以使用此模式执行所有可能的查询-请随时在评论中询问特定示例(如如何获取所有包含类别1和类别3但不包含类别2的文章)。文章和类别之间的链接是n对n关系。
一篇文章可以属于多个类别,一个类别可以附加到多篇文章
因为SQL不直接支持n对n关系,所以需要一个链接表
Table article_cats
------------------
cat_id integer,
article_id integer,
primary key (cat_id, article_id)
然后将文章链接如下:
SELECT a.name, GROUP_CONCAT(c.name) as cats
FROM articles a
LEFT JOIN article_cats ac ON (a.id = ac.article_id)
LEFT JOIN cats c ON (c.id = ac.cat_id)
GROUP BY a.id
文章和类别之间的链接是n对n关系。
一篇文章可以属于多个类别,一个类别可以附加到多篇文章
因为SQL不直接支持n对n关系,所以需要一个链接表
Table article_cats
------------------
cat_id integer,
article_id integer,
primary key (cat_id, article_id)
然后将文章链接如下:
SELECT a.name, GROUP_CONCAT(c.name) as cats
FROM articles a
LEFT JOIN article_cats ac ON (a.id = ac.article_id)
LEFT JOIN cats c ON (c.id = ac.cat_id)
GROUP BY a.id