【发布时间】:2015-01-15 20:39:55
【问题描述】:
我有一个数据表“products”和第二个表“product_components”。
“产品”由任意数量的“product_components”组成,每个“product_components”本身也可以有任意数量的“product_components”。产品和组件使用第三个表“product_bom”链接。
成本存储在“product_components”级别。
通过将其组件相加,我可以轻松获得每个“产品”行的价格,并且我可以在其内部重复查询以查找第二层组件。
谁能建议我如何无限地检查每个组件的每个组件的另一个级别的组件............等等?
谢谢,
尤弗巴西奥
更新: 这是我对顶层的基本查询。我可以在生成的循环中嵌套一个 this 的副本,并在其下再次嵌套,但这意味着有限数量的可能性。
SELECT `product_bom`.*, `products_boml`.`product_code` AS `pcode`,`products_boml`.`title` AS `title`, IF(`currency_rates`.`rate`>0,`products_boml`.`cost` * `currency_rates`.`rate`,`products_boml`.`cost`) AS `pcost`,`currency`.`currency` AS `curletters`FROM `product_bom` LEFT JOIN `products` `products_boml` ON `products_boml`.`id`=`product_bom`.`bom_part_id`
LEFT JOIN `products` `products_tlp` ON `products_tlp`.`id`='$product_id'
LEFT JOIN `business_relations` `br_boml_vendor` ON `br_boml_vendor`.`id`=`products_boml`.`vendor_id`
LEFT JOIN `business_relations` `br_tlp_vendor` ON `br_tlp_vendor`.`id`=`products_tlp`.`vendor_id`
LEFT JOIN `currency_rates` ON `currency_rates`.`base_currency_id`=`br_boml_vendor`.`currency` AND `currency_rates`.`exchange_currency_id`=`br_tlp_vendor`.`currency`
LEFT JOIN `currency` ON `currency`.`id`=`br_tlp_vendor`.`currency`
WHERE `product_bom`.`product_id`='$product_id'
ORDER BY `products_boml`.`product_code`
我也在转换货币,但这可以忽略。
谢谢。
【问题讨论】:
-
mysql 在无限递归方面表现不佳,但是您可以使用略有不同的数据模型 stackoverflow.com/questions/3704130/recursive-mysql-query 或通过执行类似存储过程 guilhembichot.blogspot.co.uk/2013/11/… 之类的操作来获得类似的结果(但是您将拥有的 SP 路线在每个深度级别手动编码)
-
谢谢,我去看看这些。好像没有太多选择...
-
所以看起来我想要的是来自 (slideshare.net/billkarwin/models-for-hierarchical-data) 的闭包表,如果数据更密集的话,这将使整个事情变得更容易。感谢 Dave 的帮助............现在我该如何在这里正式感谢你?