我正在用 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)
)
sch_part_general 是一个包含所有部分的多列表,以 part_id 作为主键。sch_part_mapping 是一个带有part_id (child) || 的两列映射表 parent_id(父母)。
有人可以通过 SQL 查询为我指明正确的方向吗?我不热衷于使用 while 循环来创建 SQL 语句,因为我认为这将非常低效,但这是我认为迄今为止唯一可行的方法。