Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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_Mysql_Database Design - Fatal编程技术网

Php 如何创建一个订单中包含多个产品的数据库模型

Php 如何创建一个订单中包含多个产品的数据库模型,php,mysql,database-design,Php,Mysql,Database Design,我正在建立一个SQL数据库模型,用于跟踪具有一定数量的多个产品的订单 该表必须有一个特定于该顺序的键值,并且从不在表中的任何其他位置重复 我正在考虑制作一行,其中orderID作为键值,然后是一个Order选项卡,其中有productID和数量,如“productID quantity”,这样就可以将它放在一个单元格中。棘手的部分是在这一行中使用多个不同的产品。可以将所有产品及其数量插入一个单元格,如下所示: "1100-3, 1500-1, 1600-8" 这是一个单元,有三种产品,分别订购

我正在建立一个SQL数据库模型,用于跟踪具有一定数量的多个产品的订单

该表必须有一个特定于该顺序的键值,并且从不在表中的任何其他位置重复

我正在考虑制作一行,其中orderID作为键值,然后是一个Order选项卡,其中有productID和数量,如“productID quantity”,这样就可以将它放在一个单元格中。棘手的部分是在这一行中使用多个不同的产品。可以将所有产品及其数量插入一个单元格,如下所示:

"1100-3, 1500-1, 1600-8"
这是一个单元,有三种产品,分别订购了3次、1次和8次。用PHP阅读,用逗号和破折号分隔


有什么方法能更有效地做到这一点吗?

你所描述的听起来像是一种“多对多”的关系。一个订单可以容纳多个产品,但一个产品也可以是多行的一部分

为此,您可以创建一个表
orders
(其中可以存储其他信息,例如它所属的用户ID),并将您的
products
表也包含在内

现在你可以通过这样的方式连接它们

CREATE TABLE order_products (
    orderid INT NOT NULL,
    productid INT NOT NULL,
    quantity INT NOT NULL,
    PRIMARY KEY (orderid, productid),
    FOREIGN KEY (orderid) REFERENCES orders (id),
    FOREIGN KEY (productid) REFERENCES products (id)
);

要选择获取其产品的所有行,只需使用。

您所描述的听起来像是“多对多”关系。一个订单可以容纳多个产品,但一个产品也可以是多行的一部分

为此,您可以创建一个表
orders
(其中可以存储其他信息,例如它所属的用户ID),并将您的
products
表也包含在内

现在你可以通过这样的方式连接它们

CREATE TABLE order_products (
    orderid INT NOT NULL,
    productid INT NOT NULL,
    quantity INT NOT NULL,
    PRIMARY KEY (orderid, productid),
    FOREIGN KEY (orderid) REFERENCES orders (id),
    FOREIGN KEY (productid) REFERENCES products (id)
);

要选择“获取所有行及其产品”,只需使用。

将每个数据放在单独的字段中,而不是将它们组合在一起。orderid,productid。因此,如果有一个订单是同一产品的3倍,那么您将有3条记录(数量),但我不再有唯一的键值,然后您将一个产品获得一行productID 1,另一个产品获得另一行productID 1,因此您只是在分解相同的问题。您的唯一键是orderid。它可以是一个增量值。是的,但是一个客户对于同一订单有多个订单id,我必须能够打印一个唯一的订单id(包括所述订单中订购的每个产品)字段=Customerid,orderID,productid,数量数据(第一项)=101001234,2数据(第二项)=101004567,3将每个数据放在单独的字段中,而不是将它们组合在一起。orderid,productid。因此,如果有一个订单是同一产品的3倍,那么您将有3条记录(数量),但我不再有唯一的键值,然后您将一个产品获得一行productID 1,另一个产品获得另一行productID 1,因此您只是在分解相同的问题。您的唯一键是orderid。它可以是一个增量值。是的,但是一个客户对于同一订单有多个订单id,我必须能够打印一个唯一的订单id(包括所述订单中订购的每个产品)字段=Customerid,orderID,productid,数量数据(第一项)=101001234,2数据(第二项)=101004567,3是否有orderID和productID组合的主键?@WoutKooijman是的,这样每个订单只能有一个产品条目(数量可变),因此您有orderID和productID组合的主键?@WoutKooijman是的,这样每个订单只能有一个产品条目(数量可变)