Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] wielopoziomowe kategorie - menu
Forum PHP.pl > Forum > Bazy danych > MySQL
nandrzejn
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.
prond
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ę.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.