Scarrr
Новичок
обработка дерева c pid>id
Возможно тема задана неверно, но я не знаю как ее назвать лучше
В обще суть такова.
Есть таблица в мускуле вида
Когда работаю с этой таблицей при проходе foreach-ем я формирую из поля links ссылку типа ?links&comms (в данном случае считается что я перехожу в подмодуль comms модуля links)
причем делается это примерно так
(код дан примерно, по памяти)
Этот алгоритм четко работает в случае если pid<id. Т.е. при обработке foreach-ем родителькие записи оказываются выше и обрабатываются раньше потомков.
В случае, если pid>id , т.е. в таблице предок записан ниже записи потомка, то при обработке foreach эта запись ($dest['links']) пропускается как еще несуществующая и естественно контантенация не происходит, или происходит некоректно (в случае нескольких наследников указанных в разных местах и разному порядке).
Прошу объяснить как бороться с данной проблемой, что использовать и т.п.
Возможно тема задана неверно, но я не знаю как ее назвать лучше

В обще суть такова.
Есть таблица в мускуле вида
PHP:
| id | pid | links |
+---+-----+----------+
| 1 | 0 | news |
| 2 | 0 | links |
| 3 | 2 | comms |
| 4 | 2 | adverts|
+---+-----+----------+
причем делается это примерно так
PHP:
foreach ($src as $k=>$v){
if ($v['pid']) $dest[$k]['links'].=$dest[$v['pid']]['links'];
else $dest[$k]['links']=$v['links'];
}
Этот алгоритм четко работает в случае если pid<id. Т.е. при обработке foreach-ем родителькие записи оказываются выше и обрабатываются раньше потомков.
В случае, если pid>id , т.е. в таблице предок записан ниже записи потомка, то при обработке foreach эта запись ($dest['links']) пропускается как еще несуществующая и естественно контантенация не происходит, или происходит некоректно (в случае нескольких наследников указанных в разных местах и разному порядке).
Прошу объяснить как бороться с данной проблемой, что использовать и т.п.