我用PHP/MySQL/Javascript编程.我有一个我们想要在子/父关系中链接的部分列表,对层数没有限制.
当我从一个部件列表中选择要将子项添加到父级时,我限制了部件列表以排除父本身以及已经是该父级子项的任何部分.
我发现的是,我也想排除父母的祖父母,否则我们就会得到一种乱伦的关系,当我展示部分树时会创造一个无限循环.
不仅如此,我还不能允许孩子成为父母或曾祖父母等的祖父母
这是我目前使用的SQL语句,我认为也可以通过使用来改进,LEFT JOIN但此时我对SQL不够熟练.
SELECT *
FROM sch_part_general
WHERE (sch_part_general.part_id <> $parentId)
AND (sch_part_general.part_id NOT IN
(SELECT part_id FROM sch_part_mapping WHERE parent_id = $parentId)
)
Run Code Online (Sandbox Code Playgroud)
sch_part_general是一个包含所有部分的多列表,其中part_id为主键.sch_part_mapping是一个带有part_id(child)||的双列映射表 parent_id(父).
有人能用SQL查询指出我正确的方向吗?我并不热衷于使用while循环来创建SQL语句,因为我认为这将是非常低效的,但这是我考虑过的唯一方法.
我对JSTree和Ajax有一个奇怪的问题.
我通过Ajax/PHP请求生成我的树,它使用...生成HTML(带有UL,LI,A标签)
$.ajax({
url: 'ajaxTreeView.php?method=edit&partid='+partId,
cache: false,
success: function(tree)
{
$('#treeViewer').html(tree);
}});
Run Code Online (Sandbox Code Playgroud)
并使用...激活代码上的JStree
options =
{
"core": { animation: 120 },
"themes": { theme: 'corral', dots: true },
"types":
{
"types":
{
"parent": { "icon": { "image": "images/custom/Legend/node_select.png" } },
"child": { "icon": { "image": "images/custom/Legend/node_select_child.png" } },
"current": { "icon": { "image": "images/custom/Legend/node.png" } }
}
},
"plugins": [ "html_data", "types", "themes", "ui", "contextmenu", "cookies" ],
"ui": { "select_limit" : 1 },
"cookies": { "save_selected" : false }
}; …Run Code Online (Sandbox Code Playgroud)