我试图动态获取孩子的产品ID。下面是我的表结构。
parent|child
---------------------
44 | 35,6,47,5,50
---------------------
47 | 8,9
---------------------
50 | 12, 15
我将仅传递一个父ID并获取子ID,如果任何一个孩子id再次有孩子,那么我也必须获取该记录。例44-> 35,6,47,5,50在这47和50有儿童ID,所以我的最终输出应该是这样的44-> 35,6,47,8,9,5,50,12,15。
我试过这个,
$sql=mysql_fetch_assoc(mysql_query("select * from chain_product where parent='44'"));
$parent=$sql['parent'];
$child=$sql['child'];
$ex=explode(",",$child);
$count=sizeof($ex);
for($i=0;$i<$count;$i++)
{
$list=add_child($ex[$i],$child);
$check=explode(",",$list);
$chck_count=sizeof($check);
if($chck_count>$count)
{
$exit=add_child($ex[$i],$list);
print_r($exit);
}
}
function add_child($main,$ch)
{
$find=mysql_query("select * from chain_product where parent='$main'");
$res=mysql_fetch_assoc($find);
if($res)
{
$replace=$main.",".$res['child'];
$alter=str_replace($main,$replace,$ch);
echo $alter;
}
}
但是我得到了这样的结果,
35,6,47,8,9,5,5035,6,47,5,50,12,15
但我需要输出应该是这样的.. 35,6,47,8,9,5,50,12,15。 任何人都可以帮我这样做..
答案 0 :(得分:3)
您的数据库结构不是最佳选择,这样会更好:
id | parent
1 | 0
2 | 1
3 | 1
4 | 2
5 | 2
这样你可以做一些递归:
function getChilds($parent=0, $depth=0){
// Select the items for the given $parent
$query = $conn->mysqli_query("SELECT id WHERE parent=".$parent); // mysqli is better, but mysql will do fine
// get the items by the parent giving as input:
while($fetch = $query->fetch_assoc() ){
echo str_repeat('-', $depth) . " ".$fetch['id'];
getChilds($fetch['id'], $depth+1); // Use id of this line to find its childs
echo "<br />";
}
}
getChilds(0); // And start it. The 0 is optional, I personaly prefer -1. Whatever rows your boat
这称为树结构,应该给出这样的结果:
1
- 2
- - 4
- - 5
- 3
在这个例子中,我使用echo作为显示目的,你可以通过数组返回值,原理相同
为了更好地回答,您当前的结构可能支持类似的方法,但因为您使用字符串,它将允许更慢并且不太灵活。您可以看到您正在使用的代码与我刚使用的数量之间的差异。如果你要删除echo并且只返回数组,它将更小:)