recursive function problem

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
tsirman
Δημοσιεύσεις: 145
Εγγραφή: 14 Νοέμ 2002 22:57
Επικοινωνία:

recursive function problem

Δημοσίευση από tsirman » 04 Νοέμ 2007 20:13

Γεια,

έχω 3 πίνακες:
1)ενα πίνακα με κατηγορίες ανακοινώσεων (categories_id, name, parent_id) ->όταν η κατηγορία είναι root τοτε έχει parent_id=0
2)ένα πίνακα με ανακοινώσεις (news_id, text, idate)
3)ένα πίνακα που αντιστοιχίζει ανακοινώσεις με κατηγορία (categories_id, news_id)

θέλω όταν θα επιλέγω μια κατηγορία, να δίνει ανακοινώσεις τόσο για αυτήν όσο και για ανακοινώσεις που ανοίκους σε παιδιά αυτής της κατηγορίας.

οπότε θέλω να κάνω το ερώτημα:

select * from news, news_to_categories where categories_id in (id1,id2,id3,id4)

θέλω λοιπόν μια συνάρτηση που να δημιουργεί το (id1,id2,id3,id4)

έχω κάνει μια συνάρτηση που τυπώνει τη λίστα με τις κατηγορίες σε μορφή πίνακα με άπειρο βάθος:

Κώδικας: Επιλογή όλων


function getcategories($catid = 0){
	$sql = mysql_query("SELECT * FROM categories WHERE parent_id='$catid' ORDER BY name");
	$num = mysql_num_rows($sql);
	$results = array();
	if ($num > 0){
		for &#40;$i = 0; $i < $num; $i++&#41; &#123;
			$parent = mysql_fetch_assoc&#40;$sql&#41;;
			$results&#91;$i&#93; = array&#40;
				"catId" => $parent&#91;"categories_id"&#93;,
				"title" => $parent&#91;"name"&#93;,
				"children" => &#40;count&#40;&#40;$children = getcategories&#40;$parent&#91;'categories_id'&#93;&#41;&#41;&#41; > 0 
					? $children
					&#58; null&#41;
			&#41;;
		&#125;
	&#125; else &#123;
		return null;
	&#125;
	return $results;	
&#125;
ξέρει κανείς κάτι;

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

recursive function problem

Δημοσίευση από p_pan » 06 Νοέμ 2007 02:31

hello tsirman... nomizo oti to 8ema s einai se la8os meros........ gia na to dei kapoios pou 8a s dosei apantisi..
Αγράματος...

Άβαταρ μέλους
tsirman
Δημοσιεύσεις: 145
Εγγραφή: 14 Νοέμ 2002 22:57
Επικοινωνία:

recursive function problem

Δημοσίευση από tsirman » 06 Νοέμ 2007 19:06

dld ?

Άβαταρ μέλους
Alice_Cooper
Δημοσιεύσεις: 1947
Εγγραφή: 11 Μάιος 2007 00:33
Τοποθεσία: Ioannina
Επικοινωνία:

recursive function problem

Δημοσίευση από Alice_Cooper » 07 Νοέμ 2007 00:48

xmmm den ksero an eimai o monos alla den epiasa ti thes...
kai na ksero na sou apantiso den katalaveno ti akrivos rotas...
kai na mhn ksero ego alla kapoios allos kalytera diatypose to
alios mpas ki exei kai o allos to idio prob me emena :p

Άβαταρ μέλους
tsirman
Δημοσιεύσεις: 145
Εγγραφή: 14 Νοέμ 2002 22:57
Επικοινωνία:

recursive function problem

Δημοσίευση από tsirman » 09 Νοέμ 2007 09:11

Για να το κάνω πιο απλό λέω το εξής:
έχουμε ένα πίνακα με κατηγορίες categories(ID,Name,ParentId) οι οποίες έχουν ενα ID ενα Name και ενα ParentId που είναι το ID του πατέρα της κατηγορίας αυτής.

π.χ.

Κώδικας: Επιλογή όλων

ID  Name         ParentId
-----------------------------
1    News           0
2    Tech           1
3    World          1
4    Greece         3
εδώ λοιπόν έχουμε μια κεντρική κατηγορία News και αυτή περιέχει δυο άλλες κατηγορίες, την Tech και την World. Τέλος η κατηγορία World περιέχει μια υποκατηγορία την Greece.
Θέλω λοιπόν μια function η οποία να έχει όρισμα ένα ID και να επιστρέφει όλα τα ID που είναι κάτω από αυτό το ID.
Οπότε αν της δώσω το ID=1 να μου δώσει όλα τα IDs που έχουν πρόγονο το 1. Άρα να μου δώσει τα 2,3,4. Αυτό με την πιο πάνω συνάρτηση το έχω κάνει αλλά το βγάζω σε πίνακα με άπειρο βάθος. Αντίθετα εγώ το θέλω σε ένα επίπεδο, δηλαδή σε πίνακα 2 διαστάσεων.

Άβαταρ μέλους
papatzas
Δημοσιεύσεις: 227
Εγγραφή: 03 Δεκ 2005 14:23

recursive function problem

Δημοσίευση από papatzas » 09 Νοέμ 2007 13:23

Mηπως βοηθήσει

Κώδικας: Επιλογή όλων

 
function processCategories&#40;$level, $path, $sel&#41;
&#123;
	
	//$categories&#91;&#93; - categories array
	//$level - current level&#58; 0 for main categories, 1 for it's subcategories, etc.
	//$path - path from root to the selected category &#40;calculated by calculatePath&#40;&#41;&#41;
	//$sel -- categoryID of a selected category

	//returns an array of &#40;categoryID, name, level&#41;
	//category tree is being rolled out "by the path", not fully

	$out = array&#40;&#41;;
	$cnt = 0;

	$parent = $path&#91;$level&#93;&#91;"parent"&#93;;
	if &#40; $parent == "" || $parent == null &#41;
		$parent = "NULL";
	$q = db_query&#40;"select categoryID, name from ".CATEGORIES_TABLE.
		" where parent=".$path&#91;$level&#93;&#91;"parent"&#93;." order by sort_order, name"&#41; 
			or die &#40;db_error&#40;&#41;&#41;;
	while &#40;$row = db_fetch_row&#40;$q&#41;&#41;
	&#123;
		$out&#91;$cnt&#93;&#91;0&#93; = $row&#91;"categoryID"&#93;;
		$out&#91;$cnt&#93;&#91;1&#93; = $row&#91;"name"&#93;;
		$out&#91;$cnt&#93;&#91;2&#93; = $level;
		$cnt++;

		//process subcategories?
		if &#40;$level+1<count&#40;$path&#41; && $row&#91;"categoryID"&#93; == $path&#91;$level+1&#93;&#41;
		&#123;
			$sub_out = processCategories&#40;$level+1,$path,$sel&#41;;
			//add $sub_out to the end of $out
			for &#40;$j=0; $j<count&#40;$sub_out&#41;; $j++&#41;
			&#123;
				$out&#91;&#93; = $sub_out&#91;$j&#93;;
				$cnt++;
			&#125;
		&#125;
	&#125;
	return $out;
&#125; //processCategories 
[/code]
:-)

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6228
Εγγραφή: 30 Νοέμ 2004 03:09

recursive function problem

Δημοσίευση από fafos » 09 Νοέμ 2007 17:10

Nomizo oti einai lathos na zhtas to kyrio ID sthn teleutaia kathgoria... gia mena oi pinakes sthn vash prepei na einai kapos etsi:

category_id - category_name <= Kyria kathgoria

category_b_id - category_b_name - category_id <= Ypokathgoria ths kyrias

news_id - news_name - category_b_id <= teleutaia kathgoria


auto pou kaneis einai na kataxoreis to id ths prohgoumenhs kathgorias sthn epomenh.. me auton ton tropo ksereis oti h newsA anhkei sthn cat_bA h opoia me thn seira ths anhkei sthn kyria kathgoria catA. To xrhsimopoioume etsi gia na mporoume na xeiristoume 3pla drop downs menu klp... Epishs panta zhtas to id apo tis eggrafes sou giati kapoia apo tis kathgories mporei na diagrafei h na allaksei kai an zhtas onomata tha sou kanei thn selida k...o :D

Άβαταρ μέλους
tsirman
Δημοσιεύσεις: 145
Εγγραφή: 14 Νοέμ 2002 22:57
Επικοινωνία:

recursive function problem

Δημοσίευση από tsirman » 10 Νοέμ 2007 13:13

@papatzas
mallon kati tetio enoo, pio sigekrimena enoo tin sinartisi pu onomazeis calculatePath().

@fafos
xoris pareksigisi i domi pu anafero ine i pio sosti ke theoritika kai praktika. afto apodikniete toso apo vivlia oso ke apo megala open source sistimata. sigura analoga tin periptosi mikres alages sti vasi epiferun ligotero poliploko kodika. omos kapies fores afto de kaliptei ti geniki periptosi :) thanks pados giati ke afto pu eipes ine mia alli ekdoxi.

Άβαταρ μέλους
papatzas
Δημοσιεύσεις: 227
Εγγραφή: 03 Δεκ 2005 14:23

recursive function problem

Δημοσίευση από papatzas » 10 Νοέμ 2007 13:45

Κώδικας: Επιλογή όλων

// id = 5  Array &#40; &#91;0&#93; => 0   &#91;1&#93; => 2 

function get_path&#40;$id&#41; &#123; 
       
      $parent = $this->get_parent&#40;$id&#41;; 

      if&#40;!is_array&#40;$path&#41;&#41; 
      $path = array&#40;&#41;; 
    
      if &#40; $parent!='' &#41; 
      &#123;             
                $path&#91;&#93; = $parent;        
                $path = array_merge&#40;$this->get_path&#40;$parent&#41;, $path&#41;;
                        
      &#125;        
      return $path;             
   &#125; 
*get_parent : select parent_id... mallon auto enoeis
:-)

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6228
Εγγραφή: 30 Νοέμ 2004 03:09

recursive function problem

Δημοσίευση από fafos » 10 Νοέμ 2007 16:07

tsirman έγραψε: @fafos
xoris pareksigisi i domi pu anafero ine i pio sosti ke theoritika kai praktika. afto apodikniete toso apo vivlia oso ke apo megala open source sistimata. sigura analoga tin periptosi mikres alages sti vasi epiferun ligotero poliploko kodika. omos kapies fores afto de kaliptei ti geniki periptosi :) thanks pados giati ke afto pu eipes ine mia alli ekdoxi.
@tsirman
xoris pareksigisi :D alla den ksero ti anaferoun ta vivlia h oi megales open efarmoges alla auton ton tropo ton vrhka prin apo xronia se megala vivlia kai se megales efarmoges :D kai auton synexizoun na xrhsimopoioun mexri shmera. Ston kodika prepei na eimaste Skotsezoi kai na vriskoume oso to dynaton syntomoterous dromous... den xreiazete na feiaxnoume mia selida kodika pou tha ftanei sthn Kina epivarinontas http kai mysql gia na travhksoume mia eggrafh :lol:

Άβαταρ μέλους
tsirman
Δημοσιεύσεις: 145
Εγγραφή: 14 Νοέμ 2002 22:57
Επικοινωνία:

recursive function problem

Δημοσίευση από tsirman » 12 Νοέμ 2007 00:29

ok paw paso :)

apla ke afto pu anafero de thelei toso kodika...
i sinartisi pu kana ine 18 sires ke dinei plires dedro me katigories. me akoma mia seira dinei ke selected option se category.

tespa no prob ola ine efprosdekta :) thanks again

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες