[ vladimirn @ 29.11.2007. 14:55 ] @
Svi predlozi, pohvale, kritike su dobrodosle :)

Table category:
_________________________________
|catID | catParent | catName
_________________________________
1----------0------ Knjizevnost
2----------1------ Strana knjizevnost
3----------2------ Romani
###########################

Table items:
____________________
itemID | itemName
____________________
1--------Peto dete
################

Table items_category
______________________
catID | itemID | itemType
______________________
3---------1---------2
##################



Table itemTypes
____________________
typeID | typeName
____________________
1--------Brajeve knjige
2--------CD izdanje
3--------Kaseta
################

elem, jedna knjiga moze spadati u vise kategorija i moze se pojavljivati u vise tipova- kao CD, kao kaseta ili knjiga...
Da li sam dobro napravio bazu? Kako bi vi to uradili?


Heh, upravo sam naleteo na problem.
npr ako kliknem na Knjizevnost hocu da mi se izlista sve sto je ispod te kategorije. Sama kategorija knjizevnost nema u sebi nijednu knjigu. Kategorija Strana knjizevnost , kao i kategorija DOmaca knjizevnost, takodje nemaju nijednu knjigu. Ali kategorija ROmani koja se nalazi ispod njih ima u sebi knjigu Peto Dete. Kako da izvucem path do njih da bih mogao da isprintam putanju: Knjizevnost->Strana Knjizevnost->Romani->Peto dete.
Drugi problem je da knjiga Peto dete moze biti i u sva tru tipa knjiga- Brajeve knjige, kasete i CD izdanja.
Treci problem :)
Kako da izlistam knjige koje se nalaze ispod kategorije Knjizevnost?

[Ovu poruku je menjao vladimirn dana 29.11.2007. u 16:37 GMT+1]

Kada zelim da ubacim knjigu, napravio sam sledece, odnosno ispisacu niz kakav ja dobijem i sa kojim ne znam bas sta da radim :0)
Code:

Array// pocetak niza
(
    [a] => addItem // akcija
    [type] => Array //ovo je niz sa tipovima knjiga
        (
            [0] => 1 //brajeve knjige
            [1] => 2 //kasete
            [2] => 3 //cd izdanja
        )

    [categorie] => Array //niz sa katgorijama
        (
            [0] => 1 //Knjizevnost
            [1] => 9 //Strana Knjizevnost
            [2] => 11 //Romani
        )

    [productName] => Peto dete //naslov knjige
    [productAutor] => Doris Lesing //ime autora
    [productDesc] => \"Peto dete\" je kratka, ali efektna opora knjiga, koja zaista pokazuje kako pisac može ozbiljno ući i u slojevitu društvenu tematiku. //opis knjige
    [Submit] => Add Product // submit dugme
)


[Ovu poruku je menjao vladimirn dana 29.11.2007. u 17:13 GMT+1]

[Ovu poruku je menjao vladimirn dana 29.11.2007. u 17:15 GMT+1]
[ zmau @ 30.11.2007. 08:15 ] @
Što se tiče problema sa stablom, ima fora koja nije baš najkorektnija teorijski, ali u praksi odlično radi posao. Id kategorije neka bude neki dugačak string. U njemu onda možeš da pamtiš celu putanju. Znači, recimo :

1 književnost
11 strana književnost
111 strani romani
12 domaća književnost
itd.
Naravno, imaš ograničenje, prvo što se tiče broja potkategorija unutar jedne kategorije (ako ceniš da ih može biti više od 10 odvojićeš više cifara, ili ćeš koristiti slovne oznake, ili...), i drugo na temu dubine hijerarhije. Ali, falabogu, varchar polja mogu da budu baš široka, a i ti verovatno nećeš imati neznamkolko kategorija u stablu, tako da ćeš se lako izvući.
A filtriranje po kategoriji se svodi na
Code:
catId like '11%'
:) za stranu književnost recimo.

Drugi problem si, kolko vidim, rešio. Imaš tabelu items_category, i u njoj možeš za jednu "knjigu" da imaš više zapisa.

Treći problem je, valjda, isto što i prvi.
[ Miroslav Ćurčić @ 03.12.2007. 07:32 ] @
Ja sam to radio tako što učitam sve kategorije u niz (samo dva polja: id, parent), pa iz aplikacije analiziram koji su sve id-ovi ispod zadatog (rekurzija ili petlja), sve to poređam u niz i spojim u string sa zarezima (CSV), i zatražim SELECT ... items, items_category ... WHERE CatID IN ($IdsNiz);
[ Fitopatolog @ 15.12.2007. 19:59 ] @
Zgodan način za pregledanje stabla je rekurzija. U tom slučaju se ima potpuna kontrola tako da se stablo može listati po dubini - sleva nadesno (i obrnuto), ili po nivoima.