prepare($query); // Update the level for all children of a set of parent ids. $query = "UPDATE `resources_objects` SET `level` = :level WHERE `parent_id` IN (:ids)"; $child_statement = DBManager::get()->prepare($query); // Loop until the hierarchy has been built. $level = 0; do { // Read parent ids $parent_statement->bindValue(':level', $level); $parent_statement->execute(); $parent_ids = $parent_statement->fetchAll(PDO::FETCH_COLUMN); // No parents, no children -> we're done. if (count($parent_ids) === 0) { break; } // Increase level $level = $level + 1; // Update level on all children, exit if no children have been // found/updated. $child_statement->bindValue(':level', $level); $child_statement->bindValue(':ids', $parent_ids, StudipPDO::PARAM_ARRAY); $updated_rows = $child_statement->execute(); } while ($updated_rows > 0); } public function down() { // No, we don't need this. } }