hmnc Posted November 6, 2005 Report Share Posted November 6, 2005 tieši tāpēc es izvelku visus datus no db un tikai tad apstrādāju atkarībā no leveļa. bij te kociņš ar ierakstiem uz 300 gab... whuh :) Link to comment Share on other sites More sharing options...
bubu Posted November 6, 2005 Report Share Posted November 6, 2005 Ļoti šaubos vai tas pāatrina darbošanos ar to koku (ja tiek runāts par šādu vienkāršu hierarhisku izvadīšanu). Pie tam, ja koks būs daaaudz lielāks, tad visu datu izvilkšana tā vai tā iebremzēs un būs relatīvi ilgāka nekā tā apstrāde. Link to comment Share on other sites More sharing options...
hmnc Posted November 6, 2005 Report Share Posted November 6, 2005 nu man liekas, ka izvadīt 300 ierakstus ar vienu kveriju un apstrādāt tos ir kudi ātrak par 300 kveriju veikšanu :) Link to comment Share on other sites More sharing options...
bubu Posted November 6, 2005 Report Share Posted November 6, 2005 Nu pag, runa iet par 300 līmeņiem vai 300 ierakstiem? Link to comment Share on other sites More sharing options...
hmnc Posted November 6, 2005 Report Share Posted November 6, 2005 nu pag sajukām :D 300 līmeņi - jābūt īpaši slimam lai ko tādu saveidotu :D vai arī īpaši advancētam ;) parastās web-lietojumprogrammās parasti pietiek 2, 3 nu maksimums 5 līmeņi. runāju par 300 ierakstiem. Link to comment Share on other sites More sharing options...
bubu Posted November 6, 2005 Report Share Posted November 6, 2005 Nu tad jau nebūs nekādi 300 kveriji :) Link to comment Share on other sites More sharing options...
ohmygod Posted November 6, 2005 Report Share Posted November 6, 2005 Kāpēc nesanāk? Katrai kategorijai takš cenšamies noselektēt kategorijas, kam tā ir parents. pat ja nav ko atgriezt - kverijs jau izpildās. Link to comment Share on other sites More sharing options...
hmnc Posted November 7, 2005 Report Share Posted November 7, 2005 bubu ja funckija iekļauj sevī queriju un, ja viņa ir rekursīva, tad kveriju skaits = ierakstu skaitu :) pietam pamēģini paskatīties cik laika aizņem ierakstu selectošana un izvadīšana. piemēram tīri praktisks piemērs no dzīves: viens selects uz 400 ierakstiem aizņem ~0.002sec, bet izvade ~0.03sec. nu ok pie izvades tur nedaudz if`i samesti pēc vajadzības :) Link to comment Share on other sites More sharing options...
bra Posted November 7, 2005 Report Share Posted November 7, 2005 Paldies ohmygod. Mazliet pielaboju Tavi kodu, daudz neko namīnīju, bet man neizdodas izdomāt kā šamo piedzīvināt tas ir lai tiktu atlasīti visi dati hierarhiskā secībā no pirmās līdz pēdējai Kā $hierarchy padodam pamatkategorijas kārtas numuru. $id un $parent_id abi vienādi - pamatkategorija. mēģināju man nesanāk :( jo piemēram nav zināms $hierarchy sākumā 0 tak :) vai lūdzu varētu bik apstāstīt par savu kodu bik vairāk Paldies jau iepriekš te manis pārveidotais kods: <? function getParents($id, $parent_id, $hierarchy) { $ide = $id; $sql = "SELECT id, name FROM main where sadid = '".$id."'"; echo $sql; $query = mysql_query($sql) or die(mysql_error()); $i = 0; while ($row = mysql_fetch_array($query)) { $i++; $hierarchy2 = $hierarchy . '.' . $i; $this->groupHierarchy[$parent_id][] = array('id' => $row['id'], 'hierarchy' => $hierarchy2, 'name' => $row['name']); getParents($row['id'], $parent_id, $hierarchy2); } } $id = '1'; $parent_id = '0'; $hierarchy = ''; echo getParents($id, $parent_id, $hierarchy); ?> Link to comment Share on other sites More sharing options...
bubu Posted November 7, 2005 Report Share Posted November 7, 2005 Kas īsti tagad neiet kā vajag? Link to comment Share on other sites More sharing options...
bra Posted November 7, 2005 Report Share Posted November 7, 2005 es īsti nesaku ka neiet kā vajag tikai nevaru īsti saprast kā izmantot šo te f-ciju kā padot tai pirmos elemantus, lai visu attēlo no pirmā līdz pēdējam ierakstam Link to comment Share on other sites More sharing options...
bubu Posted November 7, 2005 Report Share Posted November 7, 2005 Kas vainas vecajam kodam? (tas kas pirmajā postā parādīts) Pievienojot to, ko es teicu te http://php.lv/f/index.php?s=&showtopic=336...indpost&p=26455 dabū šo: <?php function show_menu($id=0, $path="") { $all = mysql_query("SELECT id, name FROM main WHERE parent_id=$id ORDER BY id ASC"); if (!$all) { echo mysql_error(); } else { if (mysql_num_rows($all)) { echo '<ul class="id_nav"'.($id==0?'id="tree"':'').'>'; $i=0; while ($row = mysql_fetch_array($all)) { $i++; $newPath = $path .($path==''?'':'.'). $i; echo '<li>'.$newPath.'<a class="nav" href="?id='.$row['id'].'">'.$row['name'].'</a>'; show_menu($row['id'], $newPath); echo '</li>'; } echo '</ul>'; } } } show_menu(); ?> Link to comment Share on other sites More sharing options...
ohmygod Posted November 7, 2005 Report Share Posted November 7, 2005 mēģināju man nesanāk :( jo piemēram nav zināms $hierarchy sākumā 0 tak :) vai lūdzu varētu bik apstāstīt par savu kodu bik vairāk Paldies jau iepriekš te manis pārveidotais kods: tev sākumā ir kverijs, kurš atlasa pamatkategorijas. Lai arī kā tās tev būtu iezīmētas. Piemēram SELECT * from cat WHERE parent_flag ='Y' vai SELECT * from cat WHERE child_id = parent_id nu da pēc jebkādas pazīmes, kas tev izdos pašu pirmo kategoriju pakāpi! Un tad jamās pārlasot tu ar $i=1 WHILE(blaa blaa blaa){ getParents($row['id'], $row['id'], $i); $i++; } iegūsti visu kategoriju koku! getParents iegūst tikai apakškategorijas visam, kas ir sākot no otrās pakāpes. Pirmā tev jāiegūst pa priekšu!! Link to comment Share on other sites More sharing options...
zimulis Posted November 20, 2008 Report Share Posted November 20, 2008 (edited) Kāds moš var palīdzēt... tauta.. a kā izskatīsies funkcija kura izmet ara "bernus" kadi noteiktai sadalai un tad turpina vadit ara 1. limena menu... Piem.... 1. menu 2. menu 2.1 menu 2.2 menu 2.3 menu 3. menu 4. menu Edited November 20, 2008 by zimulis Link to comment Share on other sites More sharing options...
Aleksejs Posted November 20, 2008 Report Share Posted November 20, 2008 Nedaudz papildinot bubu senrakstīto kodu, viens no iespējamajiem variantiem, kā tas varētu izskatīties, ir aptuveni šādi: ... <?php function show_menu($id=0, $path="") { global $izvelnes_elements_kuram_jarada_berni; $all = mysql_query("SELECT id, name FROM main WHERE parent_id=$id ORDER BY id ASC"); if (!$all) { echo mysql_error(); } else { if (mysql_num_rows($all)) { echo '<ul class="id_nav"'.($id==0?'id="tree"':'').'>'; $i=0; while ($row = mysql_fetch_array($all)) { $i++; $newPath = $path .($path==''?'':'.'). $i; echo '<li>'.$newPath.'<a class="nav" href="?id='.$row['id'].'">'.$row['name'].'</a>'; if($izvelnes_elements_kuram_jarada_berni == $row['id'] ){ show_menu($row['id'], $newPath); } echo '</li>'; } echo '</ul>'; } } } $izvelnes_elements_kuram_jarada_berni = 2;//tā menu elementa id, kas jārāda paplašināts show_menu(); ?> Šis kods gan darbosies tikai sarakstam ar diviem līmeņiem, manuprāt. Link to comment Share on other sites More sharing options...
Recommended Posts