我必须进行查询以选择父项为SFI
且ID为1
的数据,然后删除浴缸,破解并分解SFI
的儿童和淋浴盆,木地板,分手是分手的孩子。
表的结构。 (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循环中进行一些训练以实现此结果吗?
坦率地说,我不知道我们可以用一个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 :(得分: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;
}
所以,它起作用并返回了我想要的结果。