Есть таблица
id | parent_id | time
--------------------------
1 | 0 | 01.06.2009
2 | 1 | 10.06.2009
3 | 2 | 20.06.2009
4 | 3 | 30.06.2009
где, id - PK, parent_id - это родитель, ешьу - это время создания
Видно. что у ид=3, родитель 2 (time = 10.06.2009 ) и так сказать прародитель я вляется ид=1.
И будем считать, что у ид=4, прародитель 1.
Необходимо создать функцию, которая бы находила прародителя.
К сожалению, я не знаю как строится цикл while. Подскажите синтаксис.
Спустя 10 минут, 59 секунд (28.07.2009 - 08:03) sergeiss написал(а):
Ну, вообще-то, синтаксис такой...
Код |
38.6.3.4. WHILE [ <<label>> ] WHILE boolean-expression LOOP statements END LOOP [ label ]; The WHILE statement repeats a sequence of statements so long as the boolean-expression evaluates to true. The expression is checked just before each entry to the loop body. For example: WHILE amount_owed > 0 AND gift_certificate_balance > 0 LOOP -- some computations here END LOOP; WHILE NOT done LOOP -- some computations here END LOOP; |
А что, хэлпа нету, что ли?



И еще. Зачем тут цикл, я не понял?
PS. Вот тут можно скачать и хорошую систему управления базой данных, и там же есть очень качественный хэлп.
Спустя 18 минут, 34 секунды (28.07.2009 - 08:22) olgatcpip написал(а):
Цитата |
Зачем тут цикл, я не понял? |
затем, что другого решения не вижу. Слышала, что можно рекурсивные запросы писать, но даже не представляю как он должен выглядеть. подскажите?

Цитата |
А что, хэлпа нету, что ли? |
есть, но я там в указатель вводила while, а он мне не ответил ничего разумительного

Спустя 27 минут, 7 секунд (28.07.2009 - 08:49) sergeiss написал(а):
Насчет рекурсии и вообще алгоритма...
Какой вообще используется критерий того, что найден самый главный прародитель?
В целом "просится" такой алгоритм: в функции находим "родителя" объекта, переданного в качестве параметра. Если он не является "прародителем" самого высокого уровня (по неизвестным пока для меня критериям), то прямо оттуда же вызывается эта же функция, только в качестве объекта уже указываем родителя. И так далее. Как только доходим до конца цепочки, возвращаем найденного "предка".
В функции делаем только одно обращение к БД. Но в итоге их будет сделано ровно столько, сколько требуется для поиска. Получим рекурсивный вызов функции.
Я понимаю, что понятие "рекурсивный запрос" это "немножко" не то, что я предлагаю
, но я не знаю, можно ли его сделать в Постгре.
Какой вообще используется критерий того, что найден самый главный прародитель?
В целом "просится" такой алгоритм: в функции находим "родителя" объекта, переданного в качестве параметра. Если он не является "прародителем" самого высокого уровня (по неизвестным пока для меня критериям), то прямо оттуда же вызывается эта же функция, только в качестве объекта уже указываем родителя. И так далее. Как только доходим до конца цепочки, возвращаем найденного "предка".
В функции делаем только одно обращение к БД. Но в итоге их будет сделано ровно столько, сколько требуется для поиска. Получим рекурсивный вызов функции.
Я понимаю, что понятие "рекурсивный запрос" это "немножко" не то, что я предлагаю

Спустя 14 минут (28.07.2009 - 09:03) Michael написал(а):
Если у 4 прародитель 1, а не 0 (т.е. нет данных о 0 в столбце id) то
попробуй так (алгоритм php-mysql):
попробуй так (алгоритм php-mysql):
PHP |
// connect select_db |
Спустя 1 час, 16 минут, 28 секунд (28.07.2009 - 10:19) olgatcpip написал(а):
Michael, спасибо php кодом я как угодно могу выцепить правродителя, хоть рекурсией. Но мне нужно чтобы БД возвращала уже прародителя, так быстее должно работать.
_____________
Ласковое слово и кошке приятно... Плюсик в карму сойдет wink.gif
*smarty дока - новая любовь
Моё рукотворение ругайте, хвалите smile.gif
Веду маленький блог
в этом блоге публикую новые работы
WMR217126627282 wink.gif