Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 16:33 28.04.24 
Компютри и Интернет
   >> Бази данни
Всички теми Следваща тема *Кратък преглед

Тема MySQL+PHP рекурсия, а само MySQL?нови  
АвторЧaвдap (Нерегистриран)
Публикувано27.03.06 20:58



Здравейте,
Може ли да се предложи друго решение на следната ситуация:
Съдържание на книга записано в MySQL таблица. Съдържанието представлява имена на модули(в случая имената са имена на населени места), всеки модул може да има няколко подмодули, под-модулите могат да имат няколко под-под-модули и т.н.
Пример.
1.България
1.1. Смолян
1.1.1 Чепеларе
1.1.1.1 Забърдо
1.1.1.2 Пампорово
1.2 Варна
1.2.1 Бяла
2.Русия
3.Германия
3.1.Бавария
3.1.1 Мюнхен
3.1.1.1 Гармиш-Партенкирхен
4.Швеция
5.САЩ
5.1 Далас
5.1.1 Хюстън

7.Украйна

... и т.н Всеки модул, може да има неограничен брой подмодули.
Тези записи са организирани в една таблица със следните полета:
id – уникален пореден номер
thread – номер към, който даденият подмодул принадлежи, този номер е id-то на родителския модул.
name – име

Всеки модул в thread е записана 0, а на под-модул съответното id от родителския модул.
Ето и записите в таблицата с име „places”:

id thread name
1 0 България
2 1 Смолян
3 2 Чепеларе
4 3 Забърдо
5 3 Пампорово
6 1 Варна
7 6 Бяла
8 0 Русия
9 0 Германия
10 9 Бавария
11 10 Мюнхен
12 11 Гармиш-Партенкирхен
13 0 Швеция
И т.н

За да отпечатам имената на тези модули(да направя съдържание, както е погазано по-горе) използвам в PHP рекурсивна функция:

function thread($number)
{
$query=mysql_query(" SELECT id, name FROM `places` WHERE THREAD=$number;");
while($temp=mysql_fetch_array($query))
{
$id=$temp['id'];
$name=$temp['name'];
echo $name ;
thread($id);
}

return ;

}
За да отпечатам съдържанието извиквам функцията thread един път по следния начин:
thread(0) ;

Възможно ли е това, което правя да се реализира по друг начин със средствата на MySQL – вложени заявки, цикли или някакъв друг алгоритъм.
Предварително благодаря за отговорите.



Тема Re: MySQL+PHP рекурсия, а само MySQL?нови [re: Чaвдap]  
Автор bira_more (бира)
Публикувано28.03.06 19:18



A защо не оставиш цялата рекурсия за PHP?
$query=mysql_query(" SELECT id, name FROM `places`);
И след това правиш рекурсия само на резултатите.

Bеer? Mоre?




Тема Re: MySQL+PHP рекурсия, а само MySQL?нови [re: bira_more]  
АвторЧaвдap (Нерегистриран)
Публикувано29.03.06 15:51



Определо, по-добро решение!
Благодаря. А дали това може да стане само с една заявка към MySQL ?



Тема списък на съседствонови [re: Чaвдap]  
Автор Dakota (erotoman)
Публикувано30.03.06 13:33



Доколкото разбирам използваш списък на съседство (adjacency list) за съхраняване на дървото. В този случай няма как да не преминеш през рекурсия, което в твоя случай може и да не е най-подходящото. Зависи колко е голямо дървото и какво ще го правиш - дали ще се добавят често нови клони и дали ще се режат вече съществуващи или пък ще бъде сравнително статично?

В зависимост от това, би могъл да се насочиш и към други методи, например материализиран път (materialized path) или пък вложени множества (nested sets).

В други бази от данни построяването на дърво от списък на съседство се прави с т.нар. CONNECT BY синтаксис, но в MySQL за момента доколкото ми е известно няма подобен автоматизиран начин.

Everything louder than everything else...


Тема Re: MySQL+PHP рекурсия, а само MySQL?нови [re: Чaвдap]  
Автор NickBass (бас-програмист)
Публикувано30.03.06 18:17



Ето това е КНИГАТА според мен по въпроса за дърветата.
Ако се поровиш "по-старателно" в google, може и да си я дръпнеш в pdf формат.



Тема Re: MySQL+PHP рекурсия, а само MySQL?нови [re: NickBass]  
АвторЧaвдap (Нерегистриран)
Публикувано31.03.06 11:31



NickBass не разбрах коя е книгата ?



Тема MySQL рекурсия???нови [re: Чaвдap]  
АвторЙopдaн (Нерегистриран)
Публикувано31.03.06 15:25



Тъй като отскоро има такива възможности в MySQL, гледам да ползвам само по-елементарните неща.

Но за да се постигне търсения резултат е необходимо да се напише функция, която връща SQL таблица или масив или нещо подобно.
Може ли го това MySQL?



Тема Re: MySQL рекурсия??? [re: Йopдaн]  
Автор bira_more (бира)
Публикувано31.03.06 16:41



Нали ти писах.
Ако напишеш заявката - ще ти върне всички редове, а ти в PHPто ще си направиш рекурсиите.

Bеer? Mоre?




Тема Re: MySQL+PHP рекурсия, а само MySQL?нови [re: Чaвдap]  
Автор NickBass (бас-програмист)
Публикувано01.04.06 12:20



Браво на мен! Книгата е: Joe Celko's trees and hierarchies in SQL for smarties.

http://www.amazon.com/gp/product/1558609202/102-9974971-6476113?v=glance&n=283155



Тема чисто решениенови [re: Чaвдap]  
Авторspica (Нерегистриран)
Публикувано14.09.06 04:05








Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.