使用MySQL查找树中的级别数

时间:2016-03-25 08:19:12

标签: php mysql pdo

我的行有相关的行,这些行可以有相关的行。这棵树可以下降很多层次(未知)。如何根据一个参数找到树的级别数?

例如:

select * from category a 
inner join category b on a.row=b.relatedRow 
inner join category c on b.row=c.relatedRow where a.row=?

因此,如果a中有项目,则为1级。如果b,级别2中有项目,依此类推。通过这种方式,我可以发现,如果row = 1,则有3个级别的其他相关项目。

1 个答案:

答案 0 :(得分:0)

创建两个php函数,一个用于获取主类别,另一个用于获取主类别的子类别。

function GetCategory($Cat_Id, $Cat_Name="")
{
$level = "";
echo $sql = "SELECT * FROM category WHERE 1=1 AND Cat_ParentId='0'";
$result = @mysql_query($sql);
while($row = @mysql_fetch_assoc($result))
{
    if(!empty($Cat_Id))
    {
        if($row['Cat_Id']==$Cat_Id)
        {
            $selected = "selected='selected'";
        }
        else
        {
            $selected = "";
        }
    }
    else
    {
        $selected="";
    }

    $resul .=  $level.$row['Cat_Name']."<br />";
    $resul .= GetSubCateogry($row['Cat_Id'], $level);
}
return $resul;
}
function GetSubCateogry($Cat_Id, $level)
{
$level .= "--";

$sql = "SELECT * FROM category WHERE Cat_ParentId = '$Cat_Id'";
$result = @mysql_query($sql);
while($row = @mysql_fetch_assoc($result))
{
    if(!empty($Cat_Id))
    {
        if($row['Cat_Id']==$Cat_Id)
        {
            $selected = "selected='selected'";
        }
        else
        {
            $selected = "";
        }
    }
    else
    {
        $selected="";
    }

    $resul .=  $level.$row['Cat_Name']."<br />";
    $resul .= GetSubCateogry($row['Cat_Id'], $level);
}
return $resul;
}
echo GetCategory(1);