My table Structure:
id | parent_id | menu name |
---|---|---|
1 | 0 | Home |
2 | 0 | Gallery |
3 | 0 | Message |
4 | 3 | From Principal |
5 | 3 | From Guardian |
6 | 2 | Events |
7 | 2 | Students |
8 | 6 | Picnic |
9 | 6 | Sports |
Major Requirement:
Input : 9 (Sports->Events->Gallery Bottom Up Parent Wise)
output: 2 (Gallery->Events->Sports Top Down )
Our Requirement is to make the function that will return us the top most parent of any menu item. Lets say i need to find the parent of Sports (id=9) menu which is simple i.e. the menu name with id 6 i.e. Events
Simply we will write the simple query: select menu_name from table_name where id=6
But it is not as simple as we have thought to find the top most parent of any menu . Because sometime we don’t know the depth i.e level at which the top most parent is.
Here we actually don’t know the depth or level of top most parent . If you don’t know the level then use the recursive function it will save your cost of programming . Recursive function will solve your problem with magic:
Here is the Code :
function get_most_root_of_any_id($id=NULL){ if($id==NULL){ return false; } $this->CI->db->select("parent_id"); $this->CI->db->where("id",$id); $result = $this->CI->db->get("table_name"); if($result->num_rows()==0){ return false; } $record = $result->first_row(); if($record->parent_id==0){ return $id; }else{ return $this->get_most_root_of_any_id($record->parent_id); } }
This Example is made on the basis of Codeigniter , So please modify as per your need . More on RECURSION Enjoy…