我有这张桌子:
我正在尝试显示这样的分层组合:
使用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 .= " ";
}
return $str;
}
,结果显示在这里
谢谢你的回答,抱歉我的英语不是很好
答案 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
编辑:
问我你是否有任何问题,或者它是否有效(我自己没有测试过)