gpt4 book ai didi

PHP MySQL selectpicker 中的无限类别树

转载 作者:行者123 更新时间:2023-11-29 17:56:03 26 4
gpt4 key购买 nike

我正在尝试制作具有“无限深度”的 optional 。我创建了这些表,但是无法将它们提取到 selectpicker 中。我该怎么做?

在我的例子中,扇区是类别

这就是我所做的:

CREATE TABLE sectors(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
parent_id INT DEFAULT NULL
);

CREATE TABLE users(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
is_agreed TINYINT NOT NULL
);

CREATE TABLE selected_sectors(
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
selected_sector_id INT NOT NULL

);

这会做出选择,但子类别会丢失,如下所示:

public function getAllSectors(){
$statement = $this->connect()->query("SELECT * FROM sectors");
while ($row = $statement->fetch()){
$section_id = $row['id'];
$name = $row['name'];
$parent_id = $row['parent_id'];


if ($parent_id == NULL){
echo '<option value="'.$section_id.'"> '.$name.'</option>';
}elseif($parent_id == $section_id){
echo '<option value="'.$section_id.'">'.$name.'</option>';
}
}
}

我该怎么办?如有任何回应,我们将不胜感激。

最佳答案

出于多种原因,您的数据库中应该有具体化路径

CREATE TABLE sectors(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
tree VARCHAR(255) DEFAULT '',
parent_id INT DEFAULT NULL
);

其中 tree 的值应类似于 '{sector_id_depth_0}/{sector_id_depth_1}/{sector_id_depth_2}/{sector_id_depth_3}/{sector_id}'

您不能执行递归查询来生成选择(使用ORDER BY树)以及您应该对此树执行的许多其他操作。您无需查询数据库就可以知道其深度($depth = count(explode('/', $treeColumnValue));)和祖先。

并生成深度作为 ui 中的选项:

<option value="<?= $id ?>"><?php echo str_repeat('-', $depth).' '.$name; ?>

关于PHP MySQL selectpicker 中的无限类别树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48828085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com