我有一个困难的时间显示一个类别的列表,这可能是或可能不是在类别列表中的最后一个孩子。请看下面我的当前代码。
<?
$sql = "SELECT * FROM categories WHERE cat_parent_id = '0' ORDER BY cat_name ASC;";
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)){
// DISPLAY ERROR
}
mysqli_stmt_execute($stmt);
$resultData = mysqli_stmt_get_result($stmt);
while($row = mysqli_fetch_assoc($resultData)){
$cat_id = $row['cat_id'];
$cat_name = $row['cat_name'];
?>
<h3><? echo $cat_name; ?></h3>
<?
$sub_cat_list = retCatList($conn, $cat_id);
while($SubCat = mysqli_fetch_assoc($sub_cat_list)){
$cat_id = $SubCat['cat_id'];
$cat_name = $SubCat['cat_name'];
?>
<h3 style="text-indent: 20px;"><? echo $cat_name; ?></h3>
<?
}
}
?>以上只是示例代码,函数与第一条语句几乎完全一样,尽管使用ID并搜索任何子类别。这可以很好地显示顶级类别及其子类,但我想要做的是显示可能添加到顶级类别子级的子级。
因此,从这一点来看:
PARENT 1
CHILD 1.1
CHILD 1.2
PARENT 2
CHILD 2.1
CHILD 2.2对此:
PARENT 1
CHILD 1.1
SECOND CHILD 1.1.1
SECOND CHILD 1.1.2
CHILD 1.2
PARENT 2
CHILD 2.1
SECOND CHILD 2.1.1该表使用来自Cat_id的ID,并将其添加到其子表的Cat_parent_id中。我希望这是有意义的,我试图找出要运行什么样的循环,或者如何将ID添加到该循环中,直到没有子循环为止,以及如何找到运行它的次数?
谢谢
发布于 2022-08-10 00:59:28
我还没有能够充分测试这个数据库,但希望这将给您一个新的起点,您正在寻找的。
<?php
function outputCategory($parent_id, $indent = 0){
global $conn;
$sql = "SELECT * FROM `categories` WHERE `cat_parent_id` = ? ORDER BY `cat_name` ASC;";
$stmt = mysqli_stmt_init($conn);
// bind integer value $parent_id
mysqli_stmt_bind_param($stmt, "i", $parent_id);
if(!mysqli_stmt_prepare($stmt, $sql)){
// error
return;
}
mysqli_stmt_execute($stmt);
$resultData = mysqli_stmt_get_result($stmt);
if(mysqli_stmt_num_rows($stmt) === 0){
// no categories with this parent
return;
}
while($row = mysqli_fetch_assoc($resultData)){
$cat_id = $row["cat_id"];
$cat_name = $row["cat_name"];
echo "<h3 style=\"text-indent: {$indent}px\">{$cat_name}</h3>";
// recursion
outputCategory($cat_id, $indent + 20);
}
}
// initial case - parent_id = 0
outputCategory(0);注意:如果您想传递连接而不是使用$conn,也可以添加一个global $conn;参数。
https://stackoverflow.com/questions/73299312
复制相似问题