首先,我为篇幅道歉。这有点复杂(至少对我来说)。
数据库背景:
我有一个产品、变量和价格表。“产品”是关于产品的主要信息(描述、标题等)。“价格”包含有关每个价格的信息(价格、成本、所需的最低数量、运输成本等),因为某些产品可以有多个价格(例如,10 英寸小部件与 12 英寸小部件的价格不同) . “变量”是不改变价格的产品变量,例如颜色、尺寸等。
最初(大约 7 年前我建立这个数据库时)我将变量信息存储在相同产品的价格列表中的第一个价格中,以管道分隔格式(是的,我知道,badbadbad)。这通常是有效的,但我们总是遇到一个问题,有时一个变量在所有价格中都不一致。
例如,一个小部件(产品)可能是 10 英寸或 12 英寸,分别以 10 美元和 20 美元(价格)出售。但是,虽然 10" 小部件可能有蓝色和红色(变量),但 12" 小部件仅提供红色。我们通过在不一致的变量中添加一个小括号语句来改善这个问题,比如“红色(10”只)“。这种工作,但客户并不总是那么聪明,当客户选择时,很多时间都花在修复错误上一个 12 英寸的红色小部件。
从那以后,我的任务是对数据库进行现代化改造,并决定将变量放在他们自己的表中,使它们更具动态性,更容易与某些价格相匹配,并保持更可靠的库存(你无法想象噩梦)。
我的第一步是在我的测试数据库上编写一个存储过程(当我进行转换时),将所有现有变量处理成一个新的变量表(和标签表,但这并不重要,我不认为)。我有效地解析了变量,并在变量表中列出了正确的产品 ID 和它们最初关联的产品 ID。然而,我意识到这只是问题的一部分,因为我(至少对于数据库的初始转换)希望每个变量都被列为与给定产品的每个价格相关联。
为此,我创建了另一个表,如下所示:
tbl变量价格 可变价格id | 变量ID | 价格| 产品编号
这是一个多对多的变量表。
问题:
我现在的问题是,我不知道如何创建行。我可以在我的价格和变量表上创建一个左连接来获取(我认为)所有必要的数据,我只是不知道如何通过它。我的 sql 是(mysql 5.0):
SELECT p.priceid, p.productid, variableid, labelid
FROM tblprices p
LEFT JOIN tblvariables v ON p.priceid = v.priceid
ORDER BY productid, priceid
这将为我提供每个 priceid 和 productid 以及任何匹配的变量和标签 ID。这在某些情况下很好,例如当我有类似的东西时:
价格| 产品ID | 变量ID | 标签 2 | 7 | 10 | 4 2 | 7 | 11 | 4 2 | 7 | 12 | 4 3 | 7 | (空) | (null) --- 产品的另一个价格
因为现在我知道我需要为 priceid 2 和 variableids 10、11、12 创建记录,然后还为该产品的 priceid 3 创建记录。但是,我也从这个数据集中得到了没有变量的产品、一个价格和多个变量的产品以及多个价格和没有变量的产品的结果,例如:
价格| 产品ID | 变量ID | 标签 2 | 7 | 10 | 4 2 | 7 | 11 | 4 2 | 7 | 12 | 4 3 | 7 | (空) | (空值) 4 | 8 | (空) | (null) --- 1 价格无变量 5 | 9 | 13 | 5 --- 多变量,1 个价格 5 | 9 | 14 | 5 5 | 9 | 15 | 6 5 | 9 | 16 | 6 6 | 10 | (空) | (null) --- 多价,无变量 7 | 10 | (空) | (空值) 8 | 10 | (空) | (空值)
使用上述数据集,我想将条目添加到我的 tblpricesvariables 表中,如下所示:
可变价格id | 变量ID | 价格| 产品编号 1 | 10 | 2 | 7 2 | 11 | 2 | 7 3 | 12 | 2 | 7 4 | 10 | 3 | 7 5 | 11 | 3 | 7 6 | 12 | 3 | 7 7 | 13 | 5 | 9 8 | 14 | 5 | 9 9 | 15 | 5 | 9 10 | 16 | 5 | 9
我有数千条记录要处理,所以显然手动执行此操作不是答案。如果没有想出一个可以处理此类操作的存储程序,任何人至少可以为我指出正确的方向吗?我也欢迎任何关于如何更好地组织和/或构造这些数据的评论。
非常感谢您阅读所有这些并帮助我。