mysql选择递归查询

时间:2014-07-27 23:57:54

标签: php mysql recursion

我有这张桌子:

table with records example

我正在尝试显示这样的分层组合:

combo

使用select语句或如何通过PHP实现这一点是可行的吗?我在谷歌搜索,我发现它是可行的使用递归函数,但它对我来说是新的,我无法实现这一点。可能有人给我一个想法?

更新: - 我终于解决了我的问题。我创建了一个基于@ user2433317代码的递归函数,首先我创建并初始化一个变量来控制每个级别所需的空白空间

$n=-3;

接下来我写了递归函数

function ShowSubCats($id){
global $cn, $n;
$sql = "SELECT * FROM menus WHERE idPadre = '$id';";
$r = mysqli_query($cn, $sql);       
if (mysqli_num_rows($r) > 0) {
    $n+=3;
    while ($row = mysqli_fetch_object($r)) {
        echo "<option value='$row->id'>".space($n).$row->titulo."</option>" ;
        ShowSubCats($row->id);                  
    }
        $n-=3;
    }
}

并使用0参数调用它,表示idPadre = 0没有父级。 最后这是空间函数

function space($n){
$str = "";
for ($i=0; $i<$n; $i++) { 
    $str .= "&nbsp;";
}
return $str;

}

,结果显示在这里

enter image description here

谢谢你的回答,抱歉我的英语不是很好

2 个答案:

答案 0 :(得分:4)

这样的事情可以做到这一点,得到父类别,然后调用递归函数来获取所有孩子。

$sql = "SELECT * FROM table WHERE idParent = 0 ";
$results = mysqli_query($sql);
while ($row = mysqli_fetch_array($results)) {
    echo '<li>' . $row['title']) . '</li>';
    ShowSubCats($row['id']);
}


function ShowSubCats($categoryid) {

    $sql = "SELECT * FROM table WHERE idparent='$categoryid';";
    $results = mysqli_query($sql);

    if (mysqli_num_rows($results) > 0) {
        while ($row = mysqli_fetch_array($results)) {
            echo '<li>' . $row['title'] . '</a>';
            ShowSubCats($row['idparent']);
            echo '</li>';
        }
    }

}

答案 1 :(得分:1)

首先制作一个名为has_parent()的函数:

function has_parent( $id )
{
    global $connection;
    $sql = "SELECT parent FROM table WHERE id = {$id} LIMIT 1";
    $results = mysqli_query($sql);
    $row = mysqli_fetch_assoc($results);

    if ( $row == 0 )
    {
        return false;
    } else {
        return true;
    }
}

让自己完美地命名字段等,并警告我没有测试它。如果给定的id具有父项,则它基本上返回true,否则返回false Next循环遍历数据库中的所有条目:
    回声&#39;&#39;     while($ row = mysqli_fetch_assoc($ results_of_mysqli_for_all_results)){

   ?>

        <?php if (!has_parent( $row['id'] )): ?>
            <li><?php echo $row['yourField']; ?></li>
        <?php else: ?>
            <li><?php echo $row['yourField'] ?>
                <?php
                    echo '<ul>';
                    // loop through all the entries with the parent = $row['id'] ( I think you can make this yourself )
                    echo '</ul>';
                ?>
            </li>
        <?php endif ?>
   <?php  

}
echo '</ul>';

编辑:
如果您想要选择菜单,请参阅此question 编辑:
问我你是否有任何问题,或者它是否有效(我自己没有测试过)