我有一個數據「產品」表和第二個表「product_components」。Mysql/PHP無限子查詢
「產品」由任意數量的「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`
我正在轉換貨幣也,但可以忽略。
謝謝。
添加代碼片段 – Rasel
mysql無法順利執行無限遞歸,但是您可以使用輕微不同的數據模型實現類似的結果http://stackoverflow.com/questions/3704130/recursive-mysql-query或通過做一些像存儲過程http://guilhembichot.blogspot.co.uk/2013/11/with-recursive-and-mysql.html(但是你必須在每個深度級別手動編寫SP路由) – Dave
謝謝,我會去看看這些。似乎沒有太多的選擇...... – euphbasio