Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: drzewo kategorii i podliczanie ofert
Forum PHP.pl > Forum > Bazy danych > MySQL
Apo
Witam

Mam następujący problem. Mam pewną giełde i oferty umieszczane tam są w danych kategoriach. Kategorie są 3poziomowe: Kategoria główna -> podkategoria -> własciwa kategoria

Przy danej ofertcie zapisuje id 'własciwej kategorii', a reszty nie ruszam.
Struktura tabeli categories wygląda następująco:

CREATE TABLE `categories` (
`id` int(10) NOT NULL auto_increment,
`main` int(10) NOT NULL,
`name` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;

pole 'main' zawiera id kategorii nadrzędnej (tej w której sie znajduje) jeśli = 0 to jest to główna kategoria.
I teraz chcialem wygenerować drzewo kategorii w stylu:

-Kategoria główna (łączna liczba ofert w niej)
---Podkategoria1 (łączna liczba ofert w niej)
------Subkategoria ((łączna liczba ofert w niej, te id jest zapisany przy danej ofercie)
---Podkategoria2 (łączna liczba ofert w niej)

-Kategoria główna2 (łączna liczba ofert w niej)
---Podkategoria1 (łączna liczba ofert w niej)
-----Subkategoria ((łączna liczba ofert w niej, te id jest zapisany przy danej ofercie)

itd. Problem w tym ze nie wiem wogle jak sie za to zabrać :/

Pozdrawiam Apo
Ziels
Zakładam że zapisać sobie jakoś umiesz. Zczytywanie - masz trzy opcje:
Ręcznie w pętli pobierać główne kategorie, dla każdej z nich podkategorie i dla każdej z nich artykuły (trzy zagnieżdżone pętle, kiepsko)
Iteracja ze stosem/kolejką/czym ci wygodniej. Google ci powiedzą więcej.
Rekurencja. Google również doradzą.
Apo
heh wiem ze mam to rekurancja pobrac ale nie wiem jak ;/ Napisalem kilka zapytań ale żadne nie bylo doskonałe... mam nadzieje ze ktos z Was cos podobnego pisał
jarekh
Nie masz tego pobrac rekurencją, tylko rekurencyjnie wyświetlić.
Dane mozesz sobie pobrac jednym zwyklym zapytaniem i umiescic w jakiejs strukturze ( tablica, obiekt ).
Dobrze by bylo gdybys mial zapisane w kazdej kategorii ID kategori glownej, wtedy moglbys pobrac podkategorie dotyczace tylko danej kategorii glownej a nie wszystkie, jednak przy niezbyt ogromnej ilosci kategorii ( podkategorii ) nei bedzie raczej problemu.

Potem musisz wyświetlić drzewko startując od jakiejs kategorii. Rekurencyjnie robisz to w ten sposob iz pobierasz kategorie od ktorej startujesz i wyswietlasz, potem pobierasz kategorie ktore maja w MAIN wpisane ID kategorii ktora wysweitliles i w petli wywolujesz funkcje w ktorej jestes przekazujac po kolei jako parametr ID kazdej podkategorii.
  1. <?
  2.  function wyswietl($id){
  3. $nazwa = pobierz_nazwe($id);
  4. echo $nazwa;
  5. $podkategorie = pobierz_podkategorie($id);
  6. if(is_array($podkategorie){
  7. foreach($podkategorie as $p_id){
  8. wyswietl($p_id);
  9.  }
  10. }
  11. }
  12. ?>


To oczywiscie prowizorka kodu ktory ma tylko zobrazowac jak to sie robi.
Kwestia czy pobierzesz dane najpierw do tablicy czy w funkcji pobierz_podkategorie() bedziesz pobieral dopiero podkategorie z bazy danych.

Mozesz tez sprubowac pobrac z bazy danych kategorie i uporzadkowac je w strukture zagniezdzonej wielowymiarowej tablicy ( rekurencyjnie ) i z tej struktury pobierac dane.
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.