Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Помогите с созданием древовидной базы данных (http://forum.oszone.net/showthread.php?t=81826)

ssdm 29-03-2007 20:50 568157

Помогите с созданием древовидной базы данных
 
Здраствуйте.
Нужно на PHP + MySQL создать древовидную базу данных с возможностью просмотра, а так же изменения и редактирования по паролю.. Так как я новичок в этой области, то подскажите пожалуйтса действительно полезеные статьи и учебные материалы. А то скачивать и рыться в толстенных книгах как то не очень хочеться.
Заранее спасибо ! )

mar 29-03-2007 22:14 568197

ssdm
для реализации древообразной структуры очень советую почитать статьи на тему - деревья nested sets. Почитайте теорию. Если будут вопросы по реализации - задавайте, у меня были работающие варианты для mysql.
Если же вложение неглубоко и детерминировано, могу посоветовать вариант с рангами (в смысле могу описать и найти свои старые статьи)

Arrest 29-03-2007 22:24 568202

ssdm
древовидная БД - эта такая, в которой у каждой записи есть 2 обязательных параметра: id(id# элемента) и up_id(id# элемента, стоящий выше уровнем). Тогда можно вот такое:
Код:

id|up_id|  data
0 |  0 |    корень
1 |  0 |    ветвь1
2 |  1 |    ветвь1->ветвь2
3 |  0 |    ветвь3

обозначает дерево:
Код:

корень
|                \
ветвь1        ветвь3
|
ветвь2

условимся что если id = up_id - это корень.

Выборка всех элементов под ветвью с id=0:
PHP код:

SELECT FROM `drevoidnaya_tablWHERE up_id 0

Просмотр дерева до элементN:
PHP код:

$target="элементN";
$sqlres=mysql_fetch_assoc(mysql_query("SELECT * FROM `drevoidnaya_tabl` WHERE data = ".$target.";"));
$way[0]=$sqlres['up_id'];
if(
$way[0]==$sqlres['id']){
    echo(
$way[0]);
    die;
}
while(
$sqlres['id']!=$sqlres['up_id']){
//  $way[]=$sqlres['data']; //лог, если он - нужен foreach для вывода
    
echo($sqlres['data']."<br />\n"); //вывод
    
$sqlres=mysql_fetch_assoc(mysql_query("SELECT * FROM `drevoidnaya_tabl` WHERE id = ".$sqlres['id'].";"));


Это можно упростить, если в каждый элемент добавлять путь до него.
Скрипты примерные, если не работают - подгоняй напильником ;)

Дальше сделаешь сам :)

ssdm 30-03-2007 12:30 568449

mar,Arrest спасибо за помощь... решил использовать nested sets.
Правда в процессе работы возник такой глупый вопрос: как нажав на кнопку(не форму) заставить выподняться какой нить PHP - блок?

mar 30-03-2007 15:33 568553

Цитата:

возник такой глупый вопрос: как нажав на кнопку(не форму) заставить выподняться какой нить PHP - блок?
если честно, вопрос просто непонятен :)

ssdm 30-03-2007 16:01 568581

Цитата:

сли честно, вопрос просто непонятен
:) да вроде уже сам разобрался )

Другой вопрос : в файле index.php я создаю соединение с БД
Цитата:

$db=mysql_connect("localhost","root");
, далее выполняеться файл 1.php. Надо создавать новое соединение с БД? Если да , то что делать со старым?

mar 30-03-2007 16:54 568613

если новый файл включен в первый, то ничего создавать не надо.
Соединение закрывают командой: mysql_close($db);


Время: 04:01.

Время: 04:01.
© OSzone.net 2001-