ďťż

[PHP/MySQL] Pobieranie listy kategori z bazy. Problem typowo informatyczny. Nie mogę wymyślić rozwiązania.

       

Podstrony


telcocafe

Hej.
Pobieram z bazy liste kategorii.
Problem polega na tym że oprócz kategorii są pod-kategorie kategorii i pod-kategorie pod-kategorii.
Rozgałezia się to tak w nieskończoność. Nie mam pomysłu nie tyle jak napisać co wogóle zacząć pisać ten skrypt. Nie wiem czy przyjełem słuszne założenia. Wyjaśniając dokładniej.
Baza danych:
CREATE TABLE `cat_services` ( `cat_service_id` int(9) NOT NULL auto_increment, `cat_service_name` varchar(255) NOT NULL, `cat_service_order` int(11) default '0', `cat_service_parent` int(9) default '0', PRIMARY KEY (`cat_service_id`), UNIQUE KEY `cat_service_id` (`cat_service_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2;Wynik która ma dawać skrypt:
    lKategoria 1
      lSUB Kategoria 1-1
      l
      lSUB Kategoria 1-2
        lSUB Kategoria 1-2-1
        l
        lSUB Kategoria 1-2-2
        l
        lSUB Kategoria 1-2-3l

      l
      lSUB Kategoria 1-3l

    l
    lKategoria 2
      lSUB Kategoria 2-1
      l
      lSUB Kategoria 2-2l
    l
Może się to rozgałęziać w nieskończoność. Skrypt powinien sprawdzać czy jest możliwość rozgałęzienia.
Spotkał się ktoś z tym ? Można znaleźć skrypt w tym stylu gdzieś ? Albo chociaż czy założenia poprawne przyjęłem. Pozdrawiam



* Kategoria 100
o SUB Kategoria 11
o SUB Kategoria 12
+ SUB Kategoria 121
+ SUB Kategoria 122
+ SUB Kategoria 123
o SUB Kategoria 13
* Kategoria 200
o SUB Kategoria 21
o SUB Kategoria 22

I robisz tak w bazie danych kolumna z nazwą kategorii oraz kolumna z numerem porządkowym w takim formacie jak napisałem.

Pobierasz wszystko i sortujesz wedłóg numeru porządkowego, późnej sprawdzasz tylko czy $data['nr_porządkowy'][1] <> 0 jeżeli tak to tworzysz podkategorie i tak dalej zmieniając numer znaku (np w pętli).

Chyta dobrze to wytłumaczyłem :P


* Kategoria 100
o SUB Kategoria 11
o SUB Kategoria 12
+ SUB Kategoria 121
+ SUB Kategoria 122
+ SUB Kategoria 123
o SUB Kategoria 13
* Kategoria 200
o SUB Kategoria 21
o SUB Kategoria 22

I robisz tak w bazie danych kolumna z nazwą kategorii oraz kolumna z numerem porządkowym w takim formacie jak napisałem.

Pobierasz wszystko i sortujesz wedłóg numeru porządkowego, późnej sprawdzasz tylko czy $data['nr_porządkowy'][1] <> 0 jeżeli tak to tworzysz podkategorie i tak dalej zmieniając numer znaku (np w pętli).

Chyta dobrze to wytłumaczyłem :P

Hmm no tak ale jeśli będą również pod-kategorie kategorii pod-kategorii ..... to tych cyfr będzie strasznie dużo i przetworzenie tego będzie masakrowało komputer.
edit>
hmm przy takim rozwiązaniu mogą być tez problemy ze wstawianiem kategorii.

Hmm a jak wydajny byłby taki sposób:
Pobieram kategorie zerowego poziomu czyli najwyższe.
Potem w pętli wykonuje zapytania SELECT * FROM tabela WHERE cat_service_parent=$row['$array[1][cat_service_id'']']
1 jest zmienna licznikowa ponieważ zostanie utworzona tablica wielowymiarowa o indeksach kategori najwyzszego poziomu ( lub liczbowym) Potem będę mógł to zapisać do tablicy sesyjnej i nie pobierać tego w kółko 500 razy. Pytanie tylko czy serwer przetrzyma takie obciążenie bo przy założeniu że będzie powiedzymy 500 kategorii będę musiał wykonać 'kilka' dodatkowych zapytań do bazy.
Użytkownik orglee edytował ten post 30 listopad 2006, 14:20
nie jestem pewien czy to ci się przyda, ale może:
http://compzone.org/...i+MySQL-37.html

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.