Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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
Mysql/PHP无限子查询_Php_Mysql_Subquery - Fatal编程技术网

Mysql/PHP无限子查询

Mysql/PHP无限子查询,php,mysql,subquery,Php,Mysql,Subquery,我有一个数据表“products”和第二个表“product\u components” “产品”由任意数量的“产品组件”组成,每个“产品组件”本身也可以有任意数量的“产品组件”。使用第三个表“product_bom”链接产品和组件 成本存储在“产品组件”级别 我可以很容易地得到每一个“产品”行的价格,通过加上它的组件,我可以在它内部重复查询以寻找第二层组件 有谁能建议我如何为每个组件的每个组件无限地检查另一个级别的组件…………等等 谢谢 幼发拉巴西奥 更新: 这是我对顶层的基本查询。我可以将它

我有一个数据表“products”和第二个表“product\u components”

“产品”由任意数量的“产品组件”组成,每个“产品组件”本身也可以有任意数量的“产品组件”。使用第三个表“product_bom”链接产品和组件

成本存储在“产品组件”级别

我可以很容易地得到每一个“产品”行的价格,通过加上它的组件,我可以在它内部重复查询以寻找第二层组件

有谁能建议我如何为每个组件的每个组件无限地检查另一个级别的组件…………等等

谢谢

幼发拉巴西奥

更新: 这是我对顶层的基本查询。我可以将它的一个副本嵌套在生成的循环中,然后再嵌套在该循环下,但是这意味着有有限的可能性

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`
我也在兑换货币,但这可以忽略


谢谢。

我自己也有一个类似的问题,我所做的是为product\u components中的顶层设置一个“parent\u id”,它将搜索product\u components id作为其parent\u id的产品

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

例如:

产品_1由产品_2和产品_3制成,产品_3由产品_4和产品_5制成

产品3的id为3,产品4和产品5的父产品id为3

因此,要制作产品1,它需要通过产品2查找“parent\u id=2”,然后查找“none”,再到产品3查找“parent\u id=3”,我想你会得到jist


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

mysql不能很好地处理无限递归,但是您可以使用稍微不同的数据模型或通过执行类似于存储过程的操作(无论SP路由如何,您必须在每个深度级别手动编码)来获得类似的结果。谢谢,我将阅读这些内容。似乎没有太多的选项…所以看起来我想要的是()中的闭包表,这将使整个过程更容易,如果数据更密集一点的话。谢谢戴夫的帮助…………现在我该如何在这里正式感谢你呢?谢谢你。我不确定这些是否允许无限递归?例如,如果组件具有组件,而组件具有组件…则仍有未知数量的子级。另一种方法是添加一个名为“components”的字段,并用逗号(区分id)分隔组件,然后使用“explode”得到一个列表,即Product_3 components列将显示为“4,5”,您将使用$productarray=explode(‘,’,Product_3)。(伪代码)“您是否阅读了全文:P?”