tamtaram Posted January 30, 2007 Report Share Posted January 30, 2007 Tātad joks tāds - datu bāzītē pusotrs tūkstots jūzeru, katram ir savs referālis. Tagad gribētos izvilkt ārā tādu smuku kociņu, kurā katrs jūzeris var apskatīt struktūru, kas zem viņa ir izveidojusies. Ideja tāda, viss ir jāsaskalda pa līmeņiem. Es būtu kā 0. līmenis, zem manis 1. līmenī tie, kurus esmu uzaicinājis es, un attiecīgi zem katra 1. līmeņa atrastos viņa pakļautībā esošie utt .. Izmestajam kokam vajadzētu izskatīties tieši tā: lvl id rid name 0 1 1 es 1 2 1 viņš 1 3 1 tas 1 4 1 cits 2 5 4 Anna 2 6 4 Vilis 1 7 1 Aigars 1 8 1 Janka 2 9 8 Oskars 3 10 9 Jurka Katrs lietotājs apskatot savu koku neredz, kas ir par viņu augstāk, jeb cilvēkus, kas aicinājuši viņu. Viņš sev skaitās kā 0. līmenis un skaitīšana notiek no viņa klientiem. Jautājums, vai var izmantot while vai for vienu iekš otra? Jo pagaidām kaut kāds lūps lūpā ir vienīgais, ko es šeit saskatu. Palūgšu palīdzību ar kādiem piemēriem. Link to comment Share on other sites More sharing options...
bubu Posted January 30, 2007 Report Share Posted January 30, 2007 N-reizes jau bijis. Elementāra rekursija. Pameklē vairāklīmeņu menu izvēlnes taisīšanu (tas ir tas pats, kas tev vajadzīgs). Link to comment Share on other sites More sharing options...
Delfins Posted January 30, 2007 Report Share Posted January 30, 2007 Kā ieteikums, uztaisi vispirms rekursiju uz SQL. Nākošais solis - pārtaisi uz masīviem (ātrāk būs). PS: piemēri forumā ir. Link to comment Share on other sites More sharing options...
tamtaram Posted January 30, 2007 Author Report Share Posted January 30, 2007 (edited) Atvainojos, ka jautāju pirms meklēju, jo atbildes tiešām bija deguna priekšā. Tā nu es tur paspēlējos ar tiem piemēriem, vislabāk patika bubu variants, piemetu klāt līmeņus un beigās sanāca šitais: <? function printMenu($parent=1337, $level=1){ $q = mysql_query("SELECT c_nr, s_nr, c_name FROM tabula WHERE s_nr=$parent"); while ($r = mysql_fetch_array($q)){ $parent = $r[0]; echo '<a href="#">'.str_repeat(' ',$level).$level.' '.$r[0].' '.$r[1].' '.$r[2].'</a><br />'; printMenu($r[0], $level+1); } } printMenu($parent, $level); ?> http://paste.php.lv/5037 paldies, kunģi! Edited January 31, 2007 by tamtaram Link to comment Share on other sites More sharing options...
tamtaram Posted January 31, 2007 Author Report Share Posted January 31, 2007 Šitam pašam aparātam uzradās jauna astīte: katram jūzerim ir savs punktu skaits un priekš katra jūzera ir nepieciešams aprēķināt kopējo grupas punktu skatu, kas ir sakrājies no visu viņam pakļautībā esošo locekļu un apakšlocekļu punktiem. Jūzeri, kas ir augstāk par izvēlēto netiek pieskaitīti konkrētā lietotāja grupas punktos. Beigās būtu jāsanāk, ka pēdejam lietotājam grupas punktos ir tikai viņējie, taču pirmajam grupas punkti sastāv no visu lietotāju punktiem. Tabulai tātad ir pievienojusies viena kolonna 'points'. Ceru, ka ir daudz maz saprotams, ko man tur metināt klāt? Link to comment Share on other sites More sharing options...
andrisp Posted January 31, 2007 Report Share Posted January 31, 2007 (edited) hmm.. vienkārši pieprasi no tās tabulas katram jūzerim punktu skaitu un skaiti kopā. Viens veids, kā to darīt, ir rekursijā iesaistīt vēl vienu mainīgo. function printMenu($parent=1337, $level=1, $points = 0){... Izsaucot fju nepadodam šo parametru. Bet iekš rekursijas gan padodam. Selektu kā dabūt punktus jau gan mācēsi. Edited January 31, 2007 by andrisp Link to comment Share on other sites More sharing options...
bubu Posted January 31, 2007 Report Share Posted January 31, 2007 Nē, andri. Viņam vajag punktus padot uz augšu - no apakšējiem līmeņiem uz augšējiem, un nevis otrādi (tā kā tu rādi). tamtaram: tev vajag funkcijai no pēdējā līmeņa atgriezt (return) viņas punktus (sasummētus), bet izsaucot funkciju viņas rezultātu arī skaitīt kopā. Link to comment Share on other sites More sharing options...
Recommended Posts