如果表有嵌套记录,我如何从mysql表中获取主值

时间:2016-11-29 06:54:43

标签: php mysql

我有一张如下表格,

id | name  |parent
---| ---   | --- 
1  |vehicle|0 
2  |car    |1 
3  |test   |0 
4  |maruti |2 
5  |alto   |4 
6  |test2  |3

我的类别ID为5.现在我想要id 5的第一个父类别。

id 5的第一个父类别是1(车辆)

为此我需要运行4个查询来获得它。

例如,

public function getParentCategory($catId)
{
        $cat = mysql_fetch_array(mysql_query('select id,parent from category where id=$catId'));

        if ($cat['parent']  == 0) {

            return $cat['id'];

        } else {

            return $this->getParentCategory($cat['id']);
        }
}

现在上面的函数运行3次以获取类别alto

的第一个父项的id

那么,如果不以递归方式运行查询,有没有简单的方法可以让结果更容易?

1 个答案:

答案 0 :(得分:0)

我认为你应该从db中获取所有类别,然后在php中选择当前类别。 示例

$categories = mysql_fetch_array(mysql_query('select id,parent from category'));
foreach($categories as $cat){
    $this->categories[$cat['id']][] = $cat;
}

选择类别:

public function getParentCategory($catId)
{
    if ($this->categories[$catId]['parent']  == 0) {
        return $this->categories[$catId]['id'];
    } else {
        return $this->getParentCategory($this->categories[$catId]['parent']);
    }
}