Всем доброго времени суток. Есть вопрос, как реализовать функцию формирования дерева из 2 таблиц. В одной таблице родители, в другой дети. При этом, есть несколько странное условие... Если у детей есть родители, то показать их. Как это можно реализовать? Думаю у меня вся загвоздка в sql запросе.
"SELECT `parents` FROM `table` WHERE `child_id` = '%Идентификатор ребёнка%'" Таблицы выглядят примерно так: ID | parents | child_id (Таблица родителей) ID |child_id | child_info (Таблица детей) Если я правильно понял задачу
Вообще я планировал примерно такие таблицы id | name (родители) id | id_parents | name (дети) Иначе, при создании детей, придется каждый раз обновлять родителей. ИМХО не удобно
SELECT id_parents FROM childrens WHERE id = $child_id Пишем ид родителя в переменную, например $parent_id $res = mysqli_query($db, "SELECT name FROM parents WHERE id = $parent_id"); if mysqli_num_rows($res) { while ($row = mysqli_fetch_assoc ($res)) { echo $res['name']; } } else echo 'Родителей нет!';
Таким образом получается 2 запроса, это не есть гуд. Это получится 2 массива, которые не очень удобно перебирать в foreach Вот как это должно получиться в итоге - https://yadi.sk/d/tNwSSxSRJvfZN
Да не, я без выпендрежа готов ))) Просто не хочется быдлокодинга ))) Я попробовал через join по базе собрать в один массив, в принципе вариант вроде не плохой. Но я туплю с тем, как это в цикле разложить, чтобы получилось как на картинке. Так как массив получается примерно таким Код (Text): Array ( [0] => Array ( [id] => 1 [name] => счет [name_parent] => Сделка 1 [id_parent] => 1 ) [1] => Array ( [id] => 2 [name] => счет [name_parent] => Сделка 1 [id_parent] => 1 ) ) И получается, что мне в цикле foreach нужно задать, какое-то условие if, собственно с этим и трабл. Если получить 2 массива, один с родителями, другой с детьми, то получается вроде тоже самое.
Уже заведомо неправильная архитектура. Если ты строишь дерево, то у тебя каждый его узел может быть, потенциально, и потомком и родителем. В какую из двух таблиц его определять будешь?
Ну в моем понимании это дерево, но состоит оно из 2 уровней. Родители и дети фиксированы. Сейчас вопрос по большей части как это разложить через foreach
если уровень вложенности один, то просто пройти по всем детям, и распихать по всем родителям $дерево[ $ребёнок[родителя ID] ] [ $ребёнок[ID] ] = $ребёнок;