我正在为客户创建一个问卷,要求问题按 3 层级别组织。我已经成功创建了 UI,但是在过去的 3 个小时里,我一直在尝试从数据库中提取数据,以便所有内容都加载到正确的位置。数据库由客户端组织,所以我无法控制它:
id description parentId
1 Level 1 0
2 Level 2 0
3 Level 1a 1
4 Level 1b 1
5 Level 1a1 3
我在网站上发现了一个与我类似的问题,但是当我尝试它的解决方案时,我无限重复地得到了以下内容:
法典:
function makeList($par_id = 0) {
//your sql code here
$result = mysql_query("SELECT * FROM pB_test WHERE parentId = $par_id");
$pages = mysql_fetch_array( $result );
if (count($pages)) {
echo '<ul>';
foreach ($pages as $page) {
echo '<li>', $page['description'];
makeList($page['parentId']);
echo '</li>';
}
echo '</ul>';
}
}
makeList();
输出:
1
3
5
5
l
l
3
5
5
l
l
3
5
5
l
l
3
5
5
l
l
有谁知道如何解决这个问题以及问题到底是什么?干杯
每次
调用MySQL服务器并获取结果并不好
如果超过 100 行怎么办?或 200+
使用此选项仅查询一次:
$result = mysql_query("SELECT * FROM test");
$arrs = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$arrs[] = $row;
}
function build_tree($arrs, $parent_id=0, $level=0) {
foreach ($arrs as $arr) {
if ($arr['parent_id'] == $parent_id) {
echo str_repeat("-", $level)." ".$arr['name']."<br />";
build_tree($arrs, $arr['id'], $level+1);
}
}
}
build_tree($arrs);
表的常见示例
id name parent_id
递归执行此操作:
function printChildQuestions($parentid) {
$sql="SELECT * FROM pB_test WHERE parentID=$parentid";
$result=mysql_query($sql);
$i=0;
while (true) {
$row=mysql_fetch_array($result);
if (!$row) break;
if ($i==0) echo "<ul>";
$i=1;
echo '<li>'.$row['id'].' '.$row['description'].' '.$row['parentId'].'</li>';
printChildQuestions($row['id']);
}
if ($i>0) echo '</ul>';
}
printChildQuestions(0);