我有一个销售表,我想记录员工完成的所有销售。 我遇到的问题是我只能存储一个来自Products表的ProductId。有问题的是,销售产品是产品的倍数,而我目前的结构只能存储一个ProductId。我知道我的方法是错的,但我不知道如何正确修复它。我的问题是如何在销售表中存储多个产品。
这是我的销售表列。
CREATE TABLE `Sales` (
`SaleId` int(11) unsigned NOT NULL AUTO_INCREMENT,
`EmployeeId` int(11) unsigned NOT NULL,
`ProductId` int(11) unsigned NOT NULL,
PRIMARY KEY (`SaleId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
答案 0 :(得分:1)
您需要第二个表,即Sales-Product表:
CREATE TABLE `SaleProduct` (
`SaleId` int(11) unsigned NOT NULL,
`ProductId` int(11) unsigned NOT NULL,
`Quantity` int(11) unsigned NOT NULL,
PRIMARY KEY (`SaleId`, `ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
并更改您的销售表:
CREATE TABLE `Sales` (
`SaleId` int(11) unsigned NOT NULL AUTO_INCREMENT,
`EmployeeId` int(11) unsigned NOT NULL,
PRIMARY KEY (`SaleId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
答案 1 :(得分:1)
你的桌子和方法还可以。 您只需在每个product-id的sales表中插入一行。 销售的唯一关键是SaleId, 员工和产品的外键也在那里。
表中唯一缺少的是销售数量和金额。
这是典型的n:m问题,由V结构解决。
答案 2 :(得分:0)
我建议的第二种方式更“标准”,但由于我不知道你如何查询表及其大小,第一种方法可能(?)有用
示例:prod_id = 13_07_255_23_11
SELECT * FROM Sales WHERE ProductId REGEXP'(^ | )23( | $)';