Php 一篇关于多个类别的文章

Php 一篇关于多个类别的文章,php,mysql,database-design,Php,Mysql,Database Design,我需要添加文章到多个类别 例如,我有文章名“测试文章”,需要将其添加到类别1和类别2中 需要知道如何为此建立到表之间的关系 注意:过去,我在文章数据库表名“category”中创建行,并添加类别id,如1、2、3,但这会在搜索和列表中产生问题,请帮助我解决这一问题。您在这里有多对多关系:文章可以有多个类别,类别中显然可以有多个文章。如果没有至少一个表来显式存储实体之间的关联,则无法正确表示此关系。此处存在多对多关系:项目可以有多个类别,类别中显然可以有多个项目。如果没有至少一个表来显式存储实体之

我需要添加文章到多个类别 例如,我有文章名“测试文章”,需要将其添加到类别1和类别2中 需要知道如何为此建立到表之间的关系


注意:过去,我在文章数据库表名“category”中创建行,并添加类别id,如1、2、3,但这会在搜索和列表中产生问题,请帮助我解决这一问题。

您在这里有多对多关系:文章可以有多个类别,类别中显然可以有多个文章。如果没有至少一个表来显式存储实体之间的关联,则无法正确表示此关系。

此处存在多对多关系:项目可以有多个类别,类别中显然可以有多个项目。如果没有至少一个表来显式存储实体之间的关联,则无法正确表示该属性。

您需要三个表:

  • 一个表格用于
    文章
  • 一个表格用于
    类别
  • 一个将文章链接到类别的表,我们可以称之为
    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的文章)。

您需要三个表:

  • 一个表格用于
    文章
  • 一个表格用于
    类别
  • 一个将文章链接到类别的表,我们可以称之为
    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