Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] wielopoziomowe kategorie - menu
nandrzejn
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 9.06.2007

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


Witam

mam mały problem z kategoriami, a w zasadzie z ich wyswietlaniem i nie mogę sobie z nim poradzić. Dziękuję z góry za wszelkie podpowiedzi.

Konktety
dwie tabele

I tabela - kategorie
struktura: id; n_id, ile, opis
id- automatyczna numeracja;
n_id- wartosci uzyskane z id przy czym główna kategoria oznaczona jako 0 (zero) krótko mówiąc matka-dziecko;
ile- ile wpisów w kategorii;
opis- nazwa kategorii.

II tabela - wpisy (zakładam, że dany użytkownik może umieścić zgłoszenie w kilku kategoriach)
struktura: id_wpisu, id_pod, id_nad
id_wpisu - numer wpisu z tabeli zgloszenia;
id_pod - numer kategorii podrzędnej ( ostatni poziom dziecka)
id_nad - numer kategorii naddrzędnej (matka)

Jak widać daje takie zestawienie nieograniczoną liczbę poziomów menu i ilosci kategorii o ile z wyświetlaniem menu z tabeli kategorie nie mam problemów, to robią sie schody gdy chcę wyśwetlić pełne przyporządkowanie dla poszczególnego wpisu z tabeli WPISY, tzn odczytując 1 rekord z tabeli wpisy chcę wyświetlić poszczególne kategorie
czyli jeżeli rekord to piąty poziom menu to chcę wyświetlić 1_kat/2_kat/3_kat/4_kat/5_kat.
I z tym sobie nie radze dlatego prosze o pomoc.


zastanawiałem sie jeszcze nad opcją ograniczenia ilości poziomów do 5 i wówczas przyjąłem sobie strukture tabeli wpisy:
II tabela - wpisy (zakładam, że dany użytkownik może umieścić zgłoszenie w kilku kategoriach)
struktura: id_wpisu, 1_kat, 2_kat, 3_kat, 4_kat, 5_kat
id_wpisu - numer wpisu z tabeli zgloszenia;
1_kat, 2_kat, 3_kat, 4_kat, 5_kat- numery poszczególnych kategorii

Może takie rozwiązanie było by łatwiejsze?

Za podpowiedzi z góry dziękuję i pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
prond
post
Post #2





Grupa: Zarejestrowani
Postów: 254
Pomógł: 10
Dołączył: 8.11.2006
Skąd: Warszawa

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


Zastanów się może nad nieco inną reprezentacją drzewa kategorii w bazie.
Na pewno do podanego przez ciebie problemu bardzo łatwo znaleźć rozwiązanie stosując reprezentację LEFT - RIGHT TREE.
Krótki opis tej reprezentacji znajdziesz tu : http://artykuly.zyxist.com/czytaj.php/drzewa_w_php_i_mysql

Dla twojego problemu znając wartości left i right danego elementu możesz zebrać ścieżkę do niego następującym zapytaniem:
  1. SELECT * FROM tree WHERE LEFT <= {$left} AND RIGHT >= {$right}
  2. ORDER BY lleft;



Jeżeli nie chcesz zmieniać reprezentacji to będziesz musiał "przelecieć" drzewko rekurencyjnie.
Możesz to zrobić na 2 sposoby: albo zaciągnąć całą tabelkę do PHP i tam zbudować drzewo, albo za każdą iteracją pobierać nadrzędny wiersz. Proponuje tę pierwszą metodę.


--------------------
--------------------------------------------------------------------------------
weblog.axent.pl
--------------------------------------------------------------------------------
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 16:55