Здравствуйте. Имеется таблица вида:
В соответствии с полями 'uf_sap_code' и 'uf_sap_code_parent' необходимо найти родительские id и заполнить ими поле 'iblock_section_id'. Пытаюсь написать рекурсию, но не получается:
function getCategory() {
global $ibs;
$query = $ibs->GetList(
array('sort' => 'asc'),
array('IBLOCK_ID' => 5),
false,
array('ID', 'NAME', 'IBLOCK_SECTION_ID', 'UF_SAP_CODE', 'UF_SAP_CODE_PARENT')
);
$result = array();
while ($row = $query->Fetch()) {
$result[$row["UF_SAP_CODE_PARENT"]][] = $row;
}
return $result;
}
$category_arr = getCategory();
function getParentId($parent_id) {
global $category_arr;
if (isset($category_arr[$parent_id])) {
foreach ($category_arr[$parent_id] as $value) {
$id = $value["ID"];
getParentId($value["UF_SAP_CODE"]);
}
return $id;
}
}
К сожалению с рекурсией не приходилось раньше сталкиваться. Насколько я понял, нужно условие углубления, но не могу сообразить. Подскажите, пожалуйста.
Если я все верно понял то здесь и правда можно обойтись без рекурсии, несмотря на то что связи в таблице могут быть.. вложенными многократно. Основная суть ведь в том чтобы в поле iblock_section_id проставить ID родителя? Думаю тут подошел бы один вот такой SQL запрос
UPDATE your_table t1
JOIN your_table t2 ON t1.uf_sap_code_parent = t2.uf_sap_code
SET t1.iblock_section_id = t2.id
Вместо "your_table" имя вашей таблицы. Во время UPDATE'а мы попутно находим родителя (по полям uf_sap_code_parent и uf_sap_code) и извлекаем ID из него, который потом будет записан в iblock_section_id обновляемой таблицы.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей