У меня есть следующий набор кода, пытающийся обновить поле, используя 2 курсора, один внутри другого. Я использую первый курсор только для получения значения идентификатора (1-й курсор), а затем получаю список других значений идентификатора на основе этого идентификатора (2-й курсор). Проблема в том, что результирующий набор из 2-го курсора дважды содержит последний идентификатор! Я не могу найти ошибку! Что-то в цикле, что-то в переменной завершения для 2 курсоров?
Любая помощь более чем приветствуется! Заранее спасибо!
РАЗДЕЛИТЕЛЬ $$
ПРОЦЕДУРА ОТМЕНЫ, ЕСЛИ СУЩЕСТВУЕТ updateNumberOfPoisForPlacesWithChildren $$
СОЗДАНИЕ ПРОЦЕДУРЫ updateNumberOfPoisForPlacesWithChildren ()
НАЧАТЬ
ОБЪЯВИТЬ single_place_id INT (11);
ОБЪЯВИТЬ single_unique_parents_id INT (11);
ОБЪЯВИТЬ готово, temp_number_of_pois, sum_number_of_pois INT DEFAULT 0;
DECLARE unique_parents_ids CURSOR FOR SELECT DISTINCT `parent_id` FROM `places` WHERE `parent_id` IS NOT NULL;
DECLARE temp_places_ids CURSOR FOR SELECT `id` FROM `places` WHERE `parent_id` = single_unique_parents_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN unique_parents_ids;
main_loop_for_parent_ids : LOOP
SET sum_number_of_pois = 0;
IF done = 1 THEN
CLOSE unique_parents_ids;
LEAVE main_loop_for_parent_ids;
END IF;
IF NOT done = 1 THEN
FETCH unique_parents_ids INTO single_unique_parents_id;
OPEN temp_places_ids;
main_loop_for_places : LOOP
IF done = 1 THEN
CLOSE temp_places_ids;
LEAVE main_loop_for_places;
END IF;
IF NOT done = 1 THEN
FETCH temp_places_ids INTO single_place_id;
SELECT COUNT(`id`) INTO temp_number_of_pois FROM `pois` WHERE `place_id` = single_place_id;
SET sum_number_of_pois = sum_number_of_pois + temp_number_of_pois;
END IF;
END LOOP;
UPDATE `places` SET `number_of_pois`=sum_number_of_pois WHERE `id` = single_unique_parents_id;
END IF;
END LOOP;
END$$
РАЗДЕЛИТЕЛЬ;