Ako sam dobro razumeo ono što si napisao tebi treba način da lepo i kulturno uradiš prikaz svih kategorija podforuma zajedno sa kategorijama kojima ti podforumi pripadaju. Drugim rečima način da se podforumi prikazuju na sledeći način:
Kategorija1
+Podforum 1
+Podforum 2
+Podforum 3
Kategorija 2
+Podforum 4
+Podforum 5
...
U tom slučaju prethodni
JOIN izraz možeš da modifikuješ tako da se umesto vezivanja kategorija za podforume uradiš obrnutu stvar tj. da se vezuju podforumi za kategorije. Za tu potrebu možeš umesto
LEFT JOIN-a da koristiš recimo
RIGHT JOIN ali ti ja preporučujem da uradiš
LEFT JOIN i to na sledeći način.
Code:
SELECT forum_podforumi.*, forum_kategorije.* FROM forum_kategorije LEFT JOIN forum_podforumi ON forum_podforumi.kat=forum_kategorije.id GROUP BY forum_kategorije.id ORDER BY forum_kategorije.id ASC
Kao što ćeš videti ovim izrazom za svaku kategoriju vezuješ sve njegove podforume a ne obrnuto što je u ovom slučaju logičnije. Jedina stvar koju ti ovde treba da uradiš jeste da uradiš ispisivanje podataka.
Još par stvari u vezi optimizacije
Kao prvo, ako sam dobro ukapirao čemu treba da ti služi polje
tema u tom slučaju tvoja baza ne ispunjava uslove normalizovanosti tabela. Drugim rečima, ako ti tema polje služi da u njemu napišeš koja tema pripada datom podforumu (i to po jedna tema za jedan zapis) u tom slučaju, povrh svega, baza pati od anomalije ažuriranja i brisanja. Ako si hteo da napraviš bazu koja će biti sposobna da vodi računa o kategorijama, podforumima i temama trebalo je da polje sa temama koje pripadaju odgovarajućem podforumu odvojiš u posebnu tabelu. Onako laički rečeno problem je u tome što ako recimo obrišeš određeni podforum automatski gubiš info o njemu pripadajućim temama i sl. Isto tako nemoj nikada da u bazu skladištiš podatke do kojih se može doći analizom već postojećih podataka u njoj. Primera radi u tvojoj bazi skladištiš vrednost
postova tj. u toj koloni skladištiš ukupan broj postova u nekom podforumu. Taj problem se zove
redunsansa podataka tj. skladištenje viška nepotrebnih podataka jer si taj podatak mogao da dobiješ jednostavnim upitom tipa
Code:
SELECT COUNT(id) AS postova FROM forum_podforumi WHERE forum_podforumi.kat=ovde_ide_broj_kategorije
Ovo je veoma jednostavan primer a kompletna stvar se može dodatano optimizovati kombinovanjem u okviru jednog jedinog složenijeg upita.
Važna napomena: Ova fora sa
COUNT-om nije preporučljiva ako su ti tabele u bazi tipa
InnoDB a baza povelika jer se brojanje vrši bukvalnim proveravanjem svakog pojedinačnog zapisa što znači da će ti aplikacija pokazivati strašan pad performansi rada
Kako da rešiš problem vezan za tabele? Tako što ćeš kao što rekoh da odvojiš teme u posebnu tabelu i kasnije kad ti zatreba da koristiš
JOIN operaciju.
Dakle tabele trebaju da ti izgledaju ovako:
podforumi(
id, naziv, opis, kat, slika)
kategorije(
id, naziv)
teme(
temaID, forumID)
To bi bilo to za danas

Puno sreće u radu jer su počeci najuzbudljiviji
