![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Chuck |
|
|||
![]() Сушня ![]() ![]() Профиль Группа: Эксперт Сообщений: 442 Регистрация: 12.12.2003 Где: Узбекистан, Ташке нт Репутация: нет Всего: 9 |
Доброго времени суток, друзья.
Есть в БД таблица sections --------------------- section_id section_parent section_name Которая содержит данные о секциях в древовидной структуре (каждый элемент, кроме головных, имеет ID родительской секции). Задача состоит в том, чтобы написать функцию, которая бы вытаскивала из этого списка только те секции, section_parent которых равен определенному значению. Был написан вот такой вот тестовый скрипт:
Однако, при выполнении данного кода перл-интерпретатор просто зависает. Пожалуйста, подскажите, в чем причина и как правильно реализовать задачу. |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 12 Всего: 84 |
Chuck, считаю что зависание в вашем рекурсив.обходе - sub get.
|
|||
|
||||
Chuck |
|
|||
![]() Сушня ![]() ![]() Профиль Группа: Эксперт Сообщений: 442 Регистрация: 12.12.2003 Где: Узбекистан, Ташке нт Репутация: нет Всего: 9 |
Простите, не понял. Я понимаю, что зависает именно в этой функции, однако, как этого избежать?
|
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 12 Всего: 84 |
покажите здесь
|
|||
|
||||
Chuck |
|
|||
![]() Сушня ![]() ![]() Профиль Группа: Эксперт Сообщений: 442 Регистрация: 12.12.2003 Где: Узбекистан, Ташке нт Репутация: нет Всего: 9 |
Извиняюсь, что пропал, была командировка.
Дампер вывел вполне адекватные результаты, на мой взгляд. На что я должен обратить внимание?
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
Chuck, мне кажется, что с такими данными у Вас в строке
должно быть сообщение об ошибке, про невозможность использования undef в качестве ссылки на хэш. Кроме того, в этой строке правильнее использовать == вместо eq, т.к. сравниваются числовые значения. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
nitr |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 12 Всего: 84 |
Chuck, тогда объясните, что должна делать данная функция
![]() Например, из вашего скрипта видно, что необходимо вернуть "секции", у которых в "родителях" section_parent=20. Но зачем тут "на первый взгляд" рекурсия? Если всё же верно:
ТО: Из sub get уберите get($sid);. Добавлено через 3 минуты и 37 секунд А если все секции и внутри веток, то: У вас неверно создается древовидная структура! Добавлено через 6 минут и 13 секунд Я всегда привожу примерную структуру, на которой можно выявлять некоторые ошибки... Вот как пример (сильно не бить за стиль... утро ![]()
|
||||
|
|||||
Chuck |
|
|||
![]() Сушня ![]() ![]() Профиль Группа: Эксперт Сообщений: 442 Регистрация: 12.12.2003 Где: Узбекистан, Ташке нт Репутация: нет Всего: 9 |
ginnie, вы правы, но скрипт все равно зависает.
Мне кажется, это потому что я использую fetchrow_hashref(); И не правильно работаю со ссылками. Но вот как тут разобраться - не понимаю. nitr, ваш скрипт работает, и сопоставив функции get() мою и вашу, я понял, что проблема не в ней, а в том, что я храню в массиве ссылки. |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 12 Всего: 84 |
Chuck, я склоняюсь к формированию структуры!
Если немного измените мой скрипт, он сразу же зависнет ![]() Добавлено через 53 секунды Подскажу - в структуре, а точнее @sections Добавлено через 1 минуту и 32 секунды это нормально, что вы там ещё хранить хотели ;) ? |
|||
|
||||
Chuck |
|
|||
![]() Сушня ![]() ![]() Профиль Группа: Эксперт Сообщений: 442 Регистрация: 12.12.2003 Где: Узбекистан, Ташке нт Репутация: нет Всего: 9 |
Доброе утро, на ум приходит только одно: элементы массива реализовать ссылками на хеши.
|
|||
|
||||
unicross |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 422 Регистрация: 15.6.2008 Репутация: 2 Всего: 53 |
Добавьте одну строку в функцию get()
|
||||
|
|||||
ginnie |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 4 Всего: 49 |
unicross, это где же Вас такому научили?
у нас все пишут
или
Это сообщение отредактировал(а) ginnie - 6.10.2008, 13:04 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||||
|
|||||||
unicross |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 422 Регистрация: 15.6.2008 Репутация: 2 Всего: 53 |
Да. Так будет правильнее
Sorry. Еще не проснулся... |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 12 Всего: 84 |
у вас иначе? ![]() У вас формирование имхо неверное, там совсем маааленькая ошибка. которая ведет к такой большой. Возможно у вас первые три элемента зацикливают... что вам это дает? Проверьте. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: CGI программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |