【问题标题】:Mysql/PHP Infinite sub queriesMysql/PHP 无限子查询
【发布时间】: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`

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

谢谢。

【问题讨论】:

标签: php mysql subquery


【解决方案1】:

我自己也有类似的问题,我所做的是在 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)。 (伪代码)

【讨论】:

  • 谢谢。我不确定这些是否允许无限递归?例如,如果组件有组件,组件有组件......仍然有未知数量的子代。试图让我的头脑围绕它......
  • "另一种方法是添加一个名为“components”的字段并用逗号分隔组件(区分 id)并使用“explode”获取列表,即 Product_3 组件列将显示“ 4,5" 你会使用 $productarray = explode(',',Product_3). (pseudo-code)" 你读过全文了吗:P
猜你喜欢
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2015-03-02
  • 2014-05-31
相关资源
最近更新 更多