表的结构是child_id
列中的值可以重复,但对于每个副本具有不同的关联parent_id
。说child_id
1 有四个父母,然后它会在child_id
列中有3个副本,但每个副本都与3个不同的{{1}相关联}。
鉴于这些条件,我正在尝试实现的是按parent_id
排序并删除不需要的parent_id
重复项,只选择一个基于最后一个或最接近的父级(父级的级别)是-1的孩子的水平)。这可能吗?
我试图在sqlfiddle上创建一个小提琴,但我不断收到创建脚本错误所以我想我只是粘贴代码:
child_id
使用此查询,仍然可以获取重复项,因此在另一个列之前已经显示了一列(当它应该在另一个之后出现时(因为它的第1级父级在排序ASC时位于顶部)。 (父列可以有许多子列。)如果需要,我可以在我的数据库中包含实际数据的屏幕提示。
我在这里构建一个动态表头,您可以在其中添加无限数量的嵌套列。关于我如何排列行和列的内容还有一些问题,所以如果我的解释仍然有点模糊而你无法得到清晰的图片,请告诉我。但是我所做的简要介绍基本上是我尝试逐行构建并根据它们正上方的父列的顺序排列每个子级别(或行)中的列。
预期输出是在实际表格中, 1843 应该在 1842 之下,如数据库中显示其父母 1839 和的 1842 即可。我只是假设它已经在 1841 之下了,因为它早些时候被提升了,但也许事实并非如此?关于可能导致什么的更好的想法?
P.S。在上面的示例中,我尝试拆分 1841 ,因此它应该包含2个新列。
答案 0 :(得分:0)
如果您希望父母带有" -1"孩子的水平,然后使用join
:
SELECT pc.*, pcp.id
FROM parent_child_columns pc LEFT JOIN
parent_child_columns pcp
ON pc.parent_id = pcp.child_id AND pcp.level = pc.level - 1
ORDER BY pc.parent_id;