Jump to content
php.lv forumi

Recommended Posts

Posted

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 :)

  • Replies 35
  • Created
  • Last Reply

Top Posters In This Topic

Posted

Ļ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.

Posted

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.

Posted

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 :)

Posted

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);
?>

Posted

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

Posted

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();
?>

Posted
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!!

  • 3 years later...
Posted (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 by zimulis
Posted

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.


×
×
  • Create New...