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…