Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数据库复杂关系_Php_Database - Fatal编程技术网

Php 数据库复杂关系

Php 数据库复杂关系,php,database,Php,Database,我试图解决这个系统的一个问题,但我不知道如何实现这一点 让我解释一下我想要什么: 有1个配置表,可以包含多个子配置 1子配置可以包含多个子配置 1个子配置,可包含多个子配置 一个子配置可以包含以下产品: 很抱歉,这让人困惑,但问题出在这里 子配置也只能包含产品。子配置也是如此 其中最棘手的是,客户需要连接到所有这些子配置和产品 我举了一个例子: A是配置,也是唯一的配置 A1、B1和C1是配置A的子配置 A2、B2和C2是子配置A1的子配置 A3、B3和C3是子配置A2的子配置 我们有像奶酪、

我试图解决这个系统的一个问题,但我不知道如何实现这一点

让我解释一下我想要什么:

有1个配置表,可以包含多个子配置

1子配置可以包含多个子配置

1个子配置,可包含多个子配置

一个子配置可以包含以下产品:

很抱歉,这让人困惑,但问题出在这里

子配置也只能包含产品。子配置也是如此

其中最棘手的是,客户需要连接到所有这些子配置和产品


我举了一个例子:

A是配置,也是唯一的配置

A1、B1和C1是配置A的子配置

A2、B2和C2是子配置A1的子配置

A3、B3和C3是子配置A2的子配置

我们有像奶酪、薯条和鱼这样的亚配置A3的产品

但C2中也可能有一头母牛

然后,客户对奶酪和奶牛有一个真实的陈述,这意味着他选择了这些产品

如果有天才能帮我解决这个问题,请告诉我;)


PS:我添加了PHP,因为这将在连接到数据库的PHP代码中完成。

正如Eakethet在评论中提到的,一个好的解决方案是为所有配置创建一个表,然后使用父id列引用它自己

我会这样做

+-----------+-----------------+-----------+
| config_id |      name       | parent_id |
+-----------+-----------------+-----------+
|         1 | Main            | null / 0  |
|         2 | Animal products | 1         |
|         3 | Cow             | 2         |
|         4 | Chicken         | 2         |
|         5 | Milk            | 3         |
|         6 | Cheese          | 3         |
|         7 | Egg             | 4         |
+-----------+-----------------+-----------+
这在每个配置之间建立了明确和直接的关系。需要知道鸡蛋是从哪里来的吗?查一下家长。需要知道你从牛身上得到了什么产品吗?获取Cow的配置id,并查找将其列为其父项的所有项目

编辑:

更详细地解释这个结构

你有你的主要配置(你在问题中称之为A)。Main具有唯一标识它的ID(config_ID=1)。下面是我们的第一个子配置,我在回答中把它命名为“动物产品”。在其父id列中,它引用了“Main”的配置id。基本上,它是说“Main”是它的父配置。它是“Main”的子配置

下面的“动物产品”是下一层的子配置。我把我的名字命名为“牛”和“鸡”。它们都在各自的父id列中引用“动物产品”的配置id。它们是“动物产品”的子结构


底部是产品或子配置。“牛奶”和“奶酪”都以“奶牛”为其亲本(亲本编号3),而“鸡蛋”则以“鸡肉”(亲本编号4)


这可以根据需要向下延伸到任意多个级别。如果你发现你需要特定品牌的奶酪(切达奶酪或高达奶酪),你可以让他们参考“奶酪”作为他们的父母。如果您决定需要一个介于“动物产品”和“鸡肉”之间的配置,您可以添加一个名为“鸟类”的配置。将其父id设置为引用“动物产品”的配置id(1),然后将“鸡”的父id设置为引用“鸟”的配置id。

看起来您想要建立多对一自引用关系。您应该添加引用配置父级的父级\ u id,如果其为空,则为“master”。在将其与我的问题联系起来时,我不理解这一点。我可能错了,但可能有点具体?好吧,我会尽力解释的。你有你的主要配置(你在问题中称之为A)。Main具有唯一标识它的ID(config_ID=1)。下面是我们的第一个子配置,我在回答中把它命名为“动物产品”。在其父id列中,它引用了“Main”的配置id。基本上,它是说“Main”是它的父配置。它是“主”的子配置。下面的“动物产品”是子配置的下一层。我把我的名字命名为“牛”和“鸡”。它们都在各自的父id列中引用“动物产品”的配置id。它们是“动物产品”的子配置。底部是产品,或子配置。“牛奶”和“奶酪”都以“奶牛”为其亲本(亲本编号3),而“鸡蛋”则以“鸡肉”(亲本编号4)。这可以根据需要继续向下延伸。如果你发现你需要特定品牌的奶酪(切达奶酪或高达奶酪),你可以让他们参考“奶酪”作为他们的父母。如果您决定需要一个介于“动物产品”和“鸡肉”之间的配置,您可以添加一个名为“鸟类”的配置。将其父项id设置为引用“动物产品”的配置id(1),然后将“鸡”的父项id设置为引用“鸟”的配置id。