ďťż

[PHP] Potrzebuję algorytmu zliczającego temat dla zaawansowanych

       

Podstrony


telcocafe

Potrzebuję algorytmu, który zliczy ilość zawartości w kategoriach. Trudność polega na tym, że są także podkategorie. Ważne, by był on optymalny.

Z bazy MySQL pobierane są dane:ID | type | sca następnie przypisywane do tablicy numerycznej (nie asocjacyjnej) $CAT. Jeśli kategoria jest "główna", w polu SC ma wartość "P". Jeśli jest subkategorią, znajduje się tam ID kategorii nadrzędnej.

Poprawiłem kod, by dodawał ilość zawartości w podkategoriach do kategorii nadrzędnych, jednak zrobiłem to raczej niepoprawnie (ilość będzie zawyżona).
unset($cat,$ilez); db_read('ID,type,sc','cats','cat','tn',''); $ile=count($cat); if($ile>0) { for($i=0;$i<$ile;$i++) { $ilez[$i]=db_count('ID',GetCType($cat[$i][1] ),' WHERE cat='.$cat[$i][0].' AND access!=2'); } $x=$cat[0][2]; for($i=0;$i<$ile;$i++) { while($x!='P') { $ilez[$cat[$i][2]]+=$ilez[$i]; $x=$cat[$i][2]; } } for($i=0;$i<$ile;$i++) { if(is_numeric($ilez[$i])) db_q('UPDATE '.$db_pre.'cats SET num='.$ilez[$i].' WHERE ID='.$cat[$i][0],0); } unset($ilez,$cat); }
Jak najlepiej to zrobić?



co, gdzie, jak.. kod słabiutki, for do tablic, jakieś pętle w pętlach, nie podałeś struktura tabel (a wiele da się policzyć samej bazie danych)

Podaj struktury table oraz jakie dane chcesz mieć i gdzie :)

Poprawiłem trochę kod, jednak nie wiem, co wstawić w miejsce pytajników, aby nie trzeba było tworzyć dodatkowej tablicy. $cat[$x][2] być nie może, bo $x zawiera ID kategorii nadrzędnej, a w tablicy $cat kategorie posortowane są wg kolejności występowania w bazie. Jeśli będzie $cat[$i][2], pętla WHILE zapętli się.
unset($cat,$ilez,$k,$v); //Pobieranie wszystkich kategorii db_read('ID,type,sc','cats','cat','tn',''); $ile=count($cat); if($ile>0) { //Liczenie ilości zawartości dla każdej kategorii for($i=0;$i<$ile;$i++) { $ilez[$cat[$i][0]]=db_count('ID',GetCType($cat[ $i][1]),' WHERE cat='.$cat[$i][0].' AND access!=2'); } //Dodawanie ilości zawartości w subkategoriach do nadrzędnych kategorii for($i=0;$i<$ile;$i++) { $x=$cat[$i][2]; while($x!='P') { $ilez[$x]+=$ilez[$cat[$i][0]]; $x= [???]; } } //Zapis foreach($ilez as $k=>$x) { if(is_numeric($x)) db_q('UPDATE '.$db_pre.'cats SET num='.$x.' WHERE ID='.$k,0); } unset($ilez,$cat,$k,$v); }
Może są lepsze sposoby? Podałem potrzebne pola tabeli "cats". Ilośc zawartości liczona jest w tabeli arts, files, links, news lub imgs, w zależności od typu. W każdej z tych tabel jest pole CAT, które zawiera ID kategorii, do której przypisana jest zawartość.

Tablica $ilez przechowuje całkowitą ilość zawartości (nie tylko przypisanej do danej kategorii, ale i w podkategoriach). Np. $ilez[2] dotyczy kategorii o ID 2.
Użytkownik Ferrari edytował ten post 02 sierpień 2006, 12:02
Straszne są te nazwy zmiennych .. że kompletnie nie mogę sie w tym połapać :-). Tak jak pisał Riklaunim, w tym wypadku będzie dało się to zrobić w bazie danych. Zapoznaj sie z grupowaniem i agregowaniem danych przy pomocy zapytań sql.

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

  • Sitedesign by AltusUmbrae.