Автор Тема: Создание много уровневой структуры. Как организовать?  (Прочитано 9935 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн bhor

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 767
  • +0/-0
  • 0
    • Просмотр профиля
есть таблица в mysql`е: id,parent,name
покажу на примере.
id=1
parent=-1
name=мясо

id=2
parent=1
name=куры

id=3
parent=2
name=бройлеры

вывод должен быть таким
мясо
 куры
  бройлеры

уровней может быть до бесконечности. помогите написать цикл

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Я такую штуку делал. Если хочешь - скину исходник, может найдешь тама что полезное.
•••Jah\'d never let us down!•••

Оффлайн bhor

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 767
  • +0/-0
  • 0
    • Просмотр профиля
на
andrew|@|webscript.ru

Оффлайн bhor

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 767
  • +0/-0
  • 0
    • Просмотр профиля
Впринципе пример у меня есть. но такой накрученный(делался под сайт компутерного магазина) разобраться в нем невозможно.
хотелось бы посмотреть на чистый код.  Или алгоритм как это сделать.

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
bhor
Из того, что я тебе прислал - смотри table2tree.php.
Этот как раз оно.
•••Jah\'d never let us down!•••

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
Xander, а всем показать не хочешь? мне, например, интересно посмотреть на решение. или скрипт скрывается за копирайтом? ;-)
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
USE
магистры с тобой %)
просто я сам забыл, как делал, а оказалось что там кусочек совсем маленький:

function PrintIt($res) {
	
$name $res[\'name\'];
	
$alias = $res[\'alias\'];
	
echo "<li><a href=javascript:alert(\'$alias\')>$name</a>";
}
function GetNode($id,$proceed,$isRecursive=1) {
	
global $query_counter;
	
echo "<ul>";
	
if ($id == \'NULL\') {
	
	
$query = "SELECT * FROM dispatch WHERE parentid IS NULL";
	
} else {
	
	
$query = "SELECT * FROM dispatch WHERE parentid=$id";
	
}
	
$result = mysql_query($query);
	
$query_counter++;
	
if (mysql_num_rows) {
	
	
while ($row = mysql_fetch_assoc($result)) {
	
	
	
call_user_func($proceed,$row);
	
	
	
GetNode($row[\'id\'],$proceed);
	
	
}
	
}
	
echo "</ul>";
}
//GetNode(\'NULL\',\'PrintIt\');
•••Jah\'d never let us down!•••

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
да прибудет с тобой сила Xander, полезный это кусочек ;-) понравился очень и просто и работает. можно использовать его? ;-)
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
USE
Если ты уверен в том, что делаешь - то на здоровье.
А то там могут быть глюки. Ежели наши PHP-гуру добро дадут...
•••Jah\'d never let us down!•••

Оффлайн bhor

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 767
  • +0/-0
  • 0
    • Просмотр профиля
Xander
Спасибо. то что надо. работает усё

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
Цитировать
Xander:
Если ты уверен в том, что делаешь - то на здоровье.

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

спасибо, кстати.
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
2moderators: а перекиньте ветку в Алгоритмы. Там она гораздо уместнее будет.
•••Jah\'d never let us down!•••

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Господа, не хочу быть ложкой дёгтя в бочке райского наслаждения, но не кажется ли Вам, что от такого кода загнется SQL-сервер? (я про количество запросов). В MP 1.5.x я подобную задачу решил несколько по-иному ($section - строка из БД с описанием текущего раздела):


$query
=$db->query("SELECT * FROM $table_sections WHERE 1 ORDER BY sort ASC");
$parent_array=array();
foreach(
$tmp as $line)
$parent_array[$line[\'sid\']]=array($line[\'parent\'],$line[\'snamr\'],$line[\'sname\']);

$parent=$section[\'parent\'];
	
while($parent!=0)
	
{
	
	
$nav_array[]=array($parent_array[$parent][1],$parent_array[$parent][2]);
	
	
$parent=$parent_array[$parent][0];
	
}

У меня верхний parent - 0
TANSTAAFL

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
[off] ну а я в который уже раз напомню, что деревья, которые сравнительно редко меняют свою структуру лучше хранить по алгоритму Nested Sets, позволяющему за 1-2 запроса получить почти любой фрагмент дерева. http://dev.e-taller.net/dbtree
Хотя мне известен один древовидный форум с 30 000 сообщений успешно работающий и хранящий дерево сообщений по этому алгоритму. [/off]
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Цитировать
деревья, которые сравнительно редко меняют свою структуру

позволю усомниться, что система, типа форума, относится к данному классу деревьев [off]могу ошибаться...[/off]
AS IS...

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28