Jump to content
php.lv forumi

loops


tamtaram

Recommended Posts

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

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 by tamtaram
Link to comment
Share on other sites

Š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

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 by andrisp
Link to comment
Share on other sites

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

×
×
  • Create New...