2013-10-25 303 views
0

我不知道我是否做對或錯,請不要判斷我... 我想要做的是,如果一條記錄屬於父母,那麼它會有父母身份證與它..讓我告訴你我的表格模式如下。mysql | PHP |加入自己的表

enter image description here

我有兩列 ItemCategoryID & ItemParentCategoryID

讓假設一個記錄上ItemCategoryID =4屬於ItemCategoryID =2則列ItemParentCategoryID上ID 4將具有ItemCategoryID的ID。

我指的是在自己的表環..

,但問題是如何運行選擇查詢:P 我的意思是顯示所有的父母和孩子的各自的父母..

回答

0

我不要以爲你可以/可以在你的查詢中做到這一點,因爲你可以嵌套很長的路要走。

你應該創建一個getChilds函數,當你檢索一個類別時調用它自己。這樣你可以嵌套2個以上的層次。

function getCategory() 
{ 
    // Retrieve the category 


    // Get childs 
    $childs = $this->getCategoryByParent($categoryId); 
} 

function getCategorysByParent($parentId) 
{ 
    // Get category 

    // Get childs again. 
} 
0

試試這個:

function all_categories(){ 
    $data = array(); 
    $first = $this->db->select('itemParentCategoryId')->group_by('itemParentCategoryId')->get('table')->result_array(); 
    if(isset($first) && is_array($first) && count($first) > 0){ 
     foreach($first as $key => $each){ 
      $second = $this->db->select('itemCategoryId, categoryName')->where_in('itemParentCategoryId', $each['itemParentCategoryId'])->get('table')->result_array(); 

      $data[$key]['itemParentCategoryId'] = $each['itemParentCategoryId']; 
      $data[$key]['subs']     = $second; 
     } 
    } 
    print_r($data); 
} 
2

這往往是一個懶惰的設計最佳的選擇。理想情況下,你需要一個表格來處理這些關係或/和一定數量的深度。如果parent_id的父母可以擁有它自己的parent_id,這意味着潛在的無限深度。

MySQL並不是無限嵌套深度的忠實粉絲。但PHP不介意。可以在循環中運行多個查詢,例如Nil'z的,或者考慮獲取所有行並將它們排列在php中的數組中。如果你幾乎總是得到所有的行,最後的解決方案是非常好的,從而使MySQL篩選過時。

最後,考慮一下在數據庫結構中是否可以採用更理想的方法。不要害怕爲此使用多個表格。

  1. 這可能是未來強大的表現小偷。每次頁面加載時,無法控制的mysql查詢量都很容易失控。