Вывод дерева в MySQL
Данная тема уже заезжена до протертых шин, но все таки какой программист с этим не сталкивался. Я лишь покажу один пример, основанный на базе, рекурсия с выполнением каждого раза запроса может оказаться ненароком очень долгой, поэтому сначала забросим все данные одним запросом в массив, а рекурсией будем пробегаться по нему.
Понеслася.
Определимся с чем будем иметь дело. Примерная табла будет содержать как минимум 3 столбца.
CREATE TABLE Tree (
`ID` INT NOT NULL AUTO_INCREMENT,
`ParentID` INT NOT NULL,
`Title` VARCHAR(255) NOT NULL,
PRIMARY KEY(`ID`)
)
Ну и что нам теперь делать? Осталось написать скрипт который бы обработал эту таблицу и вывел дерево на экран. Как и было сказано, для начала надо выполнить запрос на всю базу.
SELECT ID, ParentID, Title FROM Tree;
Результат собираем следующим образом. Если вы представляете себе двухмерный массив то без труда поймете следующий код.
while($row = mysql_fetch_assoc($res)){
$tree[$row['ParentID']][$row['ID']] = $row['Title'];
}
Чтобы посмотреть что же лежит в массиве можно просто выполнить print_r($tree) и будет вам счастье! Для чего я заделал $row['ID'] на второй уровень? Для связи с ParentID, действуем таже как если бы мы просто выполняли запросы в рекурсии, но мы же орудуем массивами...
function ShowTree($tree, $pid=0){
echo "";
foreach( $tree as $id=>$root){
if($pid!=$id)continue;
if(count($root)){
foreach($root as $key => $title){
echo "- {$title}";
if(count($tree[$key]))ShowTree($tree,$key);
}
}
}
echo "
";
}
Step By Step
Я пробегаюсь по всему Parent дереву. Если помните то в $root будет содержаться массив с содержимым всех полей с этим ParentID. Чтобы не повторится с выводом полей сделаем затычку $pid!=$id для следующего вызова рекурсии. Осталось лишь пробежаться по содержимому, для чего запускаем второй foreach. Немного отступлюсь. чтобы не было недоразумений, типа а чего скрипт ругается на foreach, прямо перед ним делаю проверку на количество содержимого массива. Естественно, foreach обрабатывает массив и к тому же не "нулевый"!
Возвращаемся.
Именно во втором цикле надо вызывать рекурсию, для чего сначала проверим , а есть ли потомки с таким родителем.
if(count($tree[$key]))ShowTree($tree,$key);
В принципе вот и все. Согласитесь что несложно, а времени скрипта экономится , дай БожЕ. И применений куча. Так что считай что если ты прочитал и вник первый раз, то жму руки а сам сваливаю до дому.
|
Данная тема уже заезжена до протертых шин, но все таки какой программист с этим не сталкивался. Я лишь покажу один пример, основанный на базе, рекурсия с выполнением каждого раза запроса может оказаться ненароком очень долгой, поэтому сначала забросим все данные одним запросом в массив, а рекурсией будем пробегаться по нему. |
Вывод дерева в MySQL, Вывод дерева, MySQL |
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2026-04-17 » Дырявая воронка продаж: где вы теряете клиентов и как это лечит CRM
- 2026-04-17 » ИИ‑контент против человека: как найти золотую середину
- 2026-04-17 » Сайты 2026–2027: почему побеждают простые и быстрые
- 2026-04-17 » Формы сбора согласий на сайте
- 2026-04-17 » Безопасность сайта для малого бизнеса: что нужно знать, чтобы не взломали и не оштрафовали
- 2026-04-16 » Парадокс выбора: почему изобилие вариантов вредит вашей прибыли
- 2026-04-16 » Когнитивная перегрузка vs. UX: почему ваш сайт утомляет мозг пользователя
- 2026-04-16 » Эра Zero-Click: как генеративная выдача изменила путь клиента
- 2026-04-16 » Как адаптировать тексты на сайте под голосовой поиск
- 2026-04-16 » Почему ваш сайт тормозит — и вы теряете клиентов
- 2026-04-08 » Микрофронтенды — максимально простое объяснение
- 2026-04-08 » Чат-боты или живые менеджеры: что выбрать для эффективного продвижения в 2026 году?
- 2026-04-08 » Почему ваш сайт не видно в поисковой выдаче?
- 2026-04-08 » Персонализация в маркетинге: 7 примеров, которые работают
- 2026-04-08 » Как автоматизация маркетинга и продаж помогает компаниям расти быстрее и без хаоса
- 2026-04-01 » Как не переплатить за разработку: скрытые этапы создания сайта, о которых забывают при составлении ТЗ
- 2026-04-01 » Почему не стоит делать сайт «как у конкурента»
- 2026-04-01 » SSL сертификат для интернет‑магазина: почему экономия здесь обходится дороже
- 2026-04-01 » SEO, GEO и бренд: как строить видимость в 2026 году
- 2026-04-01 » Объективные метрики здоровья сайта, которые должен отслеживать каждый бизнес
- 2026-03-27 » Кибербезопасность для малого и среднего бизнеса в 2026 году: как не стать жертвой цифровых угроз
- 2026-03-27 » Объединяем CRM и маркетинговую автоматизацию: как создать единую систему продаж
- 2026-03-27 » Дизайн не главное? Почему сайт теряет клиентов, даже если вы уверены в обратном
- 2026-03-27 » SEO умерло — да здравствует SEO! Как нейросети перестроили поиск
- 2026-03-27 » Почему сайт работает медленно: проблема может быть не в хостинге, а в нагрузке
- 2026-03-13 » Причины, почему вашего сайта нет в поиске и как это исправить
- 2026-03-13 » Как интернет-магазину расти в тени маркетплейсов
- 2026-03-13 » Почему скорость загрузки сайта — это вопрос выживания в 2026 году
- 2026-03-13 » Ошибки навигации в интернет-магазине, которые убивают продажи
- 2026-03-13 » 12 признаков, что ваш сайт безнадежно устарел (и как это проверить)
Большинство людей, стремящихся к цели, способны скорее сделать одно большое усилие, чем упорно идти избранной дорогой; из-за лени и непостоянства они часто утрачивают плоды лучших своих начинаний и дают обогнать себя тем, кто отправился в путь позднее, чем они, и шел медленней, но зато безостановочно Лабрюйер Жан де (1645-1696) - французский писатель, мастер афористической публицистики |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.

Мы создаем практически любые сайты от продающих страниц до сложных, высоконагруженных и нестандартных веб приложений! Наши сайты это надежные маркетинговые инструменты для успеха Вашего бизнеса и увеличения вашей прибыли! Мы делаем красивые и максимально эффектные сайты по доступным ценам уже много лет!
Комплексный подход это не просто продвижение сайта, это целый комплекс мероприятий, который определяется целями и задачами поставленными перед сайтом и организацией, которая за этим стоит. Время однобоких методов в продвижении сайтов уже прошло, конкуренция слишком высока, чтобы была возможность расслабиться и получать \ удерживать клиентов из Интернета, просто сделав сайт и не занимаясь им...
Мы оказываем полный комплекс услуг по сопровождению сайта: информационному и техническому обслуживанию и развитию Интернет сайтов.
Контекстная реклама - это эффективный инструмент в интернет маркетинге, целью которого является увеличение продаж. Главный плюс контекстной рекламы заключается в том, что она работает избирательно.