Mysql / PHP无限子查询

时间:2015-01-15 11:21:49

标签: php mysql subquery

我有一个数据表"产品"和第二个表" product_components"。

"产品"由任意数量的" product_components"组成。每个也可以有任意数量的" product_components"他们自己。使用第三个表" product_bom"。

链接产品和组件

成本存储在" product_components"水平。

我可以轻松获得每种产品的价格"通过添加其组件,我可以在其自身内重复查询以查找第二层组件。

任何人都可以建议我如何无限地检查每个组件的每个组件的另一个组件级别............等。

谢谢,

Euphbasio

更新: 这是我对顶级的基本查询。我可以在结果循环中嵌套这个的副本,然后在那之下,但这意味着有限的可能性。

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`

我也转换为货币,但可以忽略。

感谢。

1 个答案:

答案 0 :(得分:0)

我自己也有类似的问题,我所做的是为product_components中的顶级设置“parent_id”,它会搜索product_components id为其parent_id的产品。

让我知道这是否有意义:))!

例如:

Product_1由Product_2和Product_3制成,Product_3由Product_4和Product_5制作。

Product_3 id为3,Product_4和Product_5的parent_id为3。

为了制作Product_1,它将通过Product_2并查找“parent_id = 2”找不到,转到Product_3并查找“parent_id = 3”,我认为你得到了这个。

另一种方法是添加一个名为“components”的字段,并用逗号分隔组件(区分id)并使用“explode”获取列表,即Product_3组件列将显示为“4,5”而你会使用$ productarray = explode(',',Product_3)。 (伪代码)