动态地从数据库中获取子ID?

时间:2013-09-05 11:40:47

标签: php mysql function

我试图动态获取孩子的产品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。 任何人都可以帮我这样做..

1 个答案:

答案 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并且只返回数组,它将更小:)