0

我尝试动态获取产品的子 ID。下面是我的表结构。

parent|child
---------------------
44    | 35,6,47,5,50
---------------------
47    | 8,9
---------------------
50    | 12, 15

我将只传递一个父 id 并获取子 id,如果任何一个子 id 有另一个孩子,那么我也必须获取该记录。示例 44-> 47 中的 35,6,47,5,50 和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。谁能帮我做到这一点..

4

1 回答 1

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
在这个示例中,我使用回显来显示,您可以通过数组返回值,原理相同


为了更好地回答,您当前的结构可以支持类似的方法,但是因为您使用字符串,它会允许速度较慢且灵活性较差。您可以看到您使用的代码的差异,以及我刚刚使用的数量。如果您要删除回声并只返回数组,它会更小:)

于 2013-09-05T11:48:56.427 回答