![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
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.
|
|
|
![]()
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 |
|
|
![]()
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
|
|
|
![]()
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 |
|
|
![]()
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? |
|
|
![]()
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 |
|
|
![]()
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ć. |
|
|
![]()
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
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.09.2025 - 15:54 |