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
Mikz
post
Post #2





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

Posty w temacie


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: 13.10.2025 - 20:56