|
Тема
|
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?
| |
|
Нали ти писах.
Ако напишеш заявката - ще ти върне всички редове, а ти в 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 |
|
| |
|
|
|
|