PHP статьи и уроки PHP для начинающих. Уроки по PHP.
Работа с массивами, графикой, звуком, базами данных.
Работа с протоколами на сервере HTTP и FTP.
Приветствую Вас, Гость!

Меню сайта
Категории каталога
Другие возможности PHP
Интересные возможности языка PHP, работа с другими языками, внедрение других технологий
PHP и базы данных
Взаимодействие PHP с различными базами данных, включая MySQL, SQLite, PostgreSQL, Oracle, и.т.п.
Работа с переменными
Статьи, посвященные работе с переменными PHP, датой и временем, и.т.п.
Работа с файловой системой
Приемы и методы взаимодействия с файловыми объектами
Работа с графикой и мультимедиа
Вопросы работы с графикой и мультимедиа средствами PHP, изображение, звук
Работа с протоколами HTTP и FTP
Статьи по принципам работы с протоколами HTTP и FTP, включая мехамизмы Cookie и Сессий
Работа с электронной почтой
Работа с электронной почтой средствами PHP
Интересное:
Реклама:
Смотрю "Записки о MacBook и Mac OS", в блоге gamedev программиста.
Главная » Статьи » Статьи » PHP и базы данных

Построение дерева иерархии с помощью PHP / MySQL
Рассмотрим пример построения дерева иерархии (в развернутом виде) на основе информации из базы данных с помощью PHP и MySQL. Ключ к решению данной задачи - использование рекурсивной функции. Иерархия разделов будет храниться в таблице базы данных MySQL.

Ниже на скриншоте показана данная таблица (catalogue):


  • id - первичный ключ таблицы
  • pid - id родительского раздела

Далее напишем следующий PHP-скрипт:

1. Файл dbopen.php (открывает соединение с MySQL)

php
$hostName
= "";
$userName = "yura";
$password = "yura";
$databaseName = "tree";
if (!(
$link=mysql_connect($hostName,$userName,$password))) {
printf("Ошибка при соединении с MySQL !\n");
exit();
}
if (!
mysql_select_db($databaseName, $link)) {
printf("Ошибка базы данных !");
exit();
}
?>

2. Файл index.php (основной скрипт)

php
include( "dbopen.php" );

function
ShowTree($ParentID, $lvl) {

global
$link;
global
$lvl;
$lvl++;

$sSQL="SELECT id,title,pid FROM catalogue WHERE pid=".$ParentID." ORDER BY title";
$result=mysql_query($sSQL, $link);

if (
mysql_num_rows($result) > 0) {
echo(
"
    \n");
    while (
    $row = mysql_fetch_array($result) ) {
    $ID1 = $row["id"];
    echo(
    "
  • \n");
    echo(
    "?ID=".$ID1."\">".$row["title"].""." \n");
    ShowTree($ID1, $lvl);
    $lvl--;
    }
    echo(
    "
\n"
);
}

}

ShowTree(0, 0);

mysql_close($link);

?>

Всю работу выполняет рекурсивная функция ShowTree(). Ниже на скриншоте показан пример работы index.php:



Источник: http://codnet.ru, internet-technologies.ru
Категория: PHP и базы данных
Просмотров: 5887 | Комментарии: 3
Всего комментариев: 3
3  
Alexandr прав в качестве эксперимента для новичков, но не более!
Этот скрипт убог так как каждый запрос замедляет программу, а если дерево будет из миллиона строк, допустим дерево типа "друзья друзей"?
А если к сайту будут обращаться тысячи пользователей как к сайту вконтакте?
Сервак не выдержит нагрузки! Вот за такое руки отрубывать нужно...
Не терпится увидеть пример без кучи запросов, держите:

function getByParentID(&$array, $parentid) {
$res = array();
foreach($array as $value)
if($value['pid'] == $parentid)
$res[] = $value;
if(count($res))
return $res;
else
return false;
}

function InsertbyID(&$array, $parentid = "") {
$gr = getByParentID($array, $parentid);
print_r($gr); //Выводит значение
foreach($gr as $value) {
InsertbyID($array, $value['id']);
}

Не самое быстрое но работает со смешанными массивами


2  
А мне вот интересно и тем более как раз пригодился скрипт. Сам то родился с таким знанием что-ли, а то нахватаются инфы и мнят себя вундеркиндами. Если такой умный то чего сам не придумал "быстродействующее решение для выборки из этого массива, без бесконечных циклов". Умник хренов!

1  
Такое решение на столько очевидно, что излагать его - в пустую тратить время свое и читающих. Было бы интересно почитать если бы обошлось 1 запросом к бд (запись структуры в массив) , и придумать быстродействующее решение для выборки из этого массива, без бесконечных циклов.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Copyright Viktor L.P. © 2017 Бесплатный конструктор сайтов - uCoz
down