![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
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: Kod ID | type | sc a 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 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ę. CODE 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. Ten post edytował WebCM 2.08.2006, 12:05:28 -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 12:07 |