У меня есть таблица данных «продукты» и вторая таблица «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`
Я также конвертирую валюту, но это можно игнорировать.
Благодарю.
У меня была похожая проблема: я установил «parent_id» для верхнего уровня в product_components, и он будет искать товары с идентификатором product_components в качестве их parent_id.
Дайте мне знать, если это имеет смысл :)!
Так, например:
Product_1 сделан из Product_2 и Product_3, Product_3 сделан из Product_4 и Product_5.
Идентификатор Product_3 равен 3, Product_4 и Product_5 имеют parent_id 3.
Таким образом, чтобы создать Product_1, он должен пройти через Product_2 и найти «parent_id = 2», не найти ни одного, перейти к Product_3 и найти «parent_id = 3», и я думаю, что вы получите jist.
Другой способ — добавить поле под названием «компоненты» и отделить компоненты запятой (различая идентификаторы) и использовать «взорвать», чтобы получить список, то есть столбец компонентов Product_3 будет иметь значение «4,5», и вы будете использовать $ productarray = explode (‘,’, Product_3). (Псевдо-код)
Других решений пока нет …