我有一个这样的表:
然后我想根据它们的 id 选择某些行,所以像这样:
SELECT *
FROM TABLE
WHERE id IN ('1', '5', '8', '9', '35')
我想从这个查询中也显示父/子关系,例如:
id parent
-----------
1 0
5 1
8 0
9 8
35 9
所以最终的输出看起来像这样:
1
--5
8
--9
----35
我是否在 mysql 之外执行此操作,我尝试过使用数组,但无法弄清楚,或者
我是在MYSQL里面做的吗,我也不知道怎么做。
这是我能得到的,看起来效果很好。
PS-抱歉格式问题,无法弄清楚:((fixed?)
- 我从 MYSQL 中获取parent_id 和 id 并将其放入数组中,其中数组键是 id,值是父项,因此在 mysql 的 while 循环中,如下所示:
$testarray[$id] = $parent_id;
-
然后我通过下面的函数运行它,它会按照我需要的方式对其进行排序。
function retrieveSubTree($parent, $myarray) {
$tempArray = $myarray;
$array = array();
//now we have our top level parent, lets put its children into an array, yea!
while ($child = array_search($parent, $tempArray)) {
unset($tempArray[$child]);
//now lets get all this guys children
if (in_array($child, $tempArray)) {
$array[$child] = retrieveSubTree($child, $tempArray);
} else {
$array[$child] = true;
}
}//end while
return (!empty($array)) ? $array : false;
}
function retrieveTree($myarray) {
$array = array();
$counter = 0;
foreach ($myarray as $key => $value) {
$child = $key;
$parent = $value;
//if this child is a parent of somebody else
if (in_array($child, $myarray) && $parent != '0') {
while ($myarray[$parent] != '' && $myarray[$parent] != '0') {
$newparent = $myarray[$parent];
$parent = $newparent;
}
if (!array_key_exists($parent, $array)) {
$array[$parent] = retrieveSubTree($parent, $myarray);
}
} else {
//now make sure they don't appear as some child
if (!array_key_exists($parent, $myarray)) {
//see if it is a parent of anybody
if (in_array($child, $myarray)) {
$array[$child] = retrieveSubTree($child, $myarray);
} else {
$array[$child] = true;
}
}//end if array key
}//end initial in array
}//end foreach
return (!empty($array) ? $array : false);
}
$test = array(
'1'=>'15',
'2'=>'1',
'3'=>'1',
'4'=>'0',
'5'=>'0',
'6'=>'4',
'7'=>'6',
'8'=>'7',
'9'=>'2',
'10'=>'9'
);
print_r(retrieveTree($test));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)