Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobieranie struktury drzewiastej
szalik
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 28.06.2008

Ostrzeżenie: (0%)
-----


Witam,
mam problem z pobieraniem z bazy struktury drzewiastej. Mianowicie, mam taką tabele w bazie:
PAGES:
> id
> created
> title
> body
> position
> children

position odpowiada za pozycję, a w children jest id do ktorego ma być podpięty element menu.
Wyświetlam tak główne elementy:

<?php
$pages = $db->query_select("SELECT * FROM `pages` WHERE `children` = '0' GROUP BY `position` ORDER BY `position`");
foreach($pages as $page) {
echo $page['title'].' position: '.$page['position'].'<br />';

}
?>

Ale kompletnie nie mam pomysłu jak wyświetlać podelementy tymbardziej, że chciałbym aby mozna było nieskończenie podpinać podelementy. Np dla takiej struktury:
| 1 | 12.06.2008 12:34 | title 1 | dasdasdas | 1 | 0 |
| 2 | 12.06.2008 12:34 | title 2 | dasdasdas | 2 | 1 |
| 3 | 12.06.2008 12:34 | title 3 | dasdasdas | 3 | 2 |
| 4 | 12.06.2008 12:34 | title 4 | dasdasdas | 4 | 2 |
| 5 | 12.06.2008 12:34 | title 5 | dasdasdas | 5 | 0 |
| 6 | 12.06.2008 12:34 | title 6 | dasdasdas | 6 | 5 |

Wyświetlane byłoby coś takiego:
title 1
> title 2
>> title 3
>> title 4
title 5
> title 6

Mógłby mnie ktoś naprowadzić (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ?
Z góry dzięki i pzodrawiam,
Kamil
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Najpierw pobierasz glowna galaz co juz masz. Potem dla kazdego elementu galezi pobierasz jego dzieci i tak caly zcas. Przy dużej ilości może być z tym problem dlatego polecam dla tego celu drzewa left right. Teorii na ten temat jest baardzo dużo.
Go to the top of the page
+Quote Post
Mikz
post
Post #3





Grupa: Zarejestrowani
Postów: 48
Pomógł: 3
Dołączył: 7.12.2007

Ostrzeżenie: (0%)
-----


Źle to rozwiązałeś. Chociaż nie bardzo rozumiem o co Ci chodzi z "w children jest id do ktorego ma być podpięty element menu", children to liczba mnoga :-). Ale wydaje mi się że to może Ci pomóc:
Jeśli chcesz mieć nieskończoną liczbę elementów, musisz zrobić tzw. relację jeden do wielu, czyli:

PAGES:
> id
> created
> title
> body
> position

PAGE_CHILDREN:
> id:
> pola_jakie_chcesz:
> page_id:

I wybieranie jest proste: "SELECT * FROM `page_children` WHERE `page_id` = 'tu_id_strony' --tu sortowania i inne;
Jeśli chcesz pobrać jedno dziecko to: "SELECT * FROM `page_children` WHERE `page_id` = 'tu_id_strony' ORDER BY `kolumna` LIMIT 0,1;

Ewentualnie, jeśli to PAGE jest dzieckiem PAGE, robisz inaczej:

PAGES:
> id
> created
> title
> body
> position
> parent_id

I wtedy pobierasz tak: "SELECT * FROM `pages` WHERE `parent_id` = 'tu_id_strony' --tu sortowania i inne;
I pojedyncze pobieranie analogicznie do poprzedniego przykładu.

No, przynajmniej tak mówi zasada relacyjności w bazach. Poczytaj sobie o tym :-).

W ogóle sam osobiście zawsze polecam używanie ORMów, to jest zdecydowanie wygodniejsza bez-zapytaniowa i dosyć bezbolesna metoda korzystania z baz danych. A w ogóle to najlepiej symfony+propel i życie staje się prostsze :-).

Pozdrawiam

Ten post edytował Mikz 5.08.2009, 10:57:11
Go to the top of the page
+Quote Post
bełdzio
post
Post #4





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


looknij http://www.beldzio.com/drzewka
Go to the top of the page
+Quote Post
szalik
post
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 28.06.2008

Ostrzeżenie: (0%)
-----


Wykorzystałem rozwiązanie beldzia ale jak to teraz wyświetlić aby miało wcięcia, ładna pętla w php nie działa ;/

Z góry dzięki,
Kamil
Go to the top of the page
+Quote Post
wookieb
post
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




To rozwiązanie bełdzia nazywa się właśnie drzewem LEFT RIGHt o którym oczywiście nie poczytałeś w googlach..
http://artykuly.zyxist.com/czytaj.php/drzewa_w_php_i_mysql pierwszy link w googlach. To było takie trudne?
Go to the top of the page
+Quote Post
szalik
post
Post #7





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 28.06.2008

Ostrzeżenie: (0%)
-----


Znalazłem tego sajta lecz kod jest strasznie niejasny, mógłby mi ktoś podpowiedzieć jak stworzyć tablice z wyników zapytania z porady beldzia. Aby wyniki były zapisane np. w taki sposób:

$tree = array(
0 => array(
'tag' => 'NavigationMode',
'value' => array(
0 => array(
'tag' => 'Title',
'value' => 'Introduction'
),
1 => array(
'tag' => 'NavigationNode',
'value' => array(
0 => array(
'tag' => 'Title',
'value' => 'Sub Intro'
)

)
)
)
),
1 => array(
'tag' => 'NavigationMode',
'value' => array(
0 => array(
'tag' => 'Title',
'value' => 'Module 1'
)
)
)
);

Z góry dzięki,
Kamil
Go to the top of the page
+Quote Post
wookieb
post
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Oho. Wręcz przeciwnie. Jest bardzo jasno napisany.
Skopiuj go. Pobaw się to będziesz miał wszystko jasne. Nie nikt nie może ci podać rozwiązania bo dostałeś gotowce a skoro ich nie umiesz używać to tym bardziej nie będziesz w stanie użyć nawet naszej pomocy. Pora ruszyć tyłek i pomyśleć.
Go to the top of the page
+Quote Post
bełdzio
post
Post #9





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


na blogasku masz pokazane jak robić wcięcia, możesz wykorzystać ten sposób który został tam wykorzystany, albo po prostu w pętl wypisującej dane sprawdząc wartośc pola `level` i jeśli się zmieni to odpowiednio dodawac / zmniejszać wcięcie
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.09.2025 - 15:54