PDA

Показать полную графическую версию : Помогите с созданием древовидной базы данных


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

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

Arrest
29-03-2007, 22:24
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:
SELECT * FROM `drevoidnaya_tabl` WHERE up_id = 0;
Просмотр дерева до элементN:

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

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

ssdm
30-03-2007, 16:01
сли честно, вопрос просто непонятен
:) да вроде уже сам разобрался )

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

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




© OSzone.net 2001-2012