2017-07-14 51 views
0

我必须做出查询来选择父母的数据是SFI与ID 1然后删除浴,破坏和分手SFI的孩子和淋浴盆,木地板,screeded休息的孩子。管理单列中的父子层次

表的结构。 (SOR表)

sor_id | items  | parent_id 
------------------------- 
1 | SFI   | 0 
2 | Remove bath | 1 
3 | Hack off | 1 
4 | break up | 1 
5 | Shower tray | 4 
6 | Timber floor| 4 
7 | screeded | 4 
8 | general 123 | 1 

所以我的问题是,我们可以使用自联接两次,在PHP一些锻炼环路,用于achieveing这样的结果?

坦率地说,我不知道,我们可以管理这个层次有一个PARENT_ID,

select * from sor as m_sor 
LEFT JOIN sor as c_sor ON m_sor.sor_id = c_sor.parent_id 
LEFT JOIN sor as sc_sor 0N sc_sor.sor_id = c_sor.parent_id 
+0

零N?这不会工作 – Strawberry

+0

@Strawberry。抱歉。零N?我没有明白你的意思。 – Bhavin

+1

好吧,仔细想想,然后再次阅读您的查询。很小心。 – Strawberry

回答

0

由于每@ RamRaider的指示MySQL不支持递归查询。而且我无法更改表格结构。 所以我做了一个递归函数。 首先我选择了数据库中的所有数据并使用下面的recursive php函数。

function buildTree($ar, $pid = 0) { 
      $op = array(); 
      foreach($ar as $item) { 
       if($item['parent_id'] == $pid) { 
        $op[$item['sor_id']] = array(
         'sor_id' => $item['sor_id'], 
         'item_no' => $item['item_no'], 
         'price' => $item['price'], 
         'base_qty' => $item['base_qty'], 
         'description' => $item['description'], 
         'type' => $item['type'], 
         'form_name' => $item['form_name'], 
         'status' => $item['status'], 
         'modified_date' => $item['modified_date'], 
         'parent_id' => $item['parent_id'] 
        ); 
        // using recursion 
        $children = buildTree($ar, $item['sor_id']); 
        if($children) { 
         $op[$item['sor_id']]['children'] = $children; 
        } 
       } 
      } 
      return $op; 
} 

因此,它的工作,并返回给我想要的结果。