[英]Grabbing child-nodes of parent using the adjacency model in MySQL
我在使用MySQL Table的当前模型时遇到了困难,即我似乎无法正确查询特定父级的所有子节点。 如标题所示,我正在使用邻接模型。
问题在于,我在网上找到的大多数方法要么查询所有叶节点,要么选择的不仅仅是我尝试获取的内容。
我关注的第一个教程是在MikeHillyer.com上 ,他的解决方案是达到以下效果:
SELECT t1.name FROM
category AS t1 LEFT JOIN category as t2
ON t1.category_id = t2.parent
WHERE t2.category_id IS NULL;
这样做的问题是它查询所有叶节点,而不仅仅是与父节点有关的叶节点。 他还建议使用嵌套集模型,我真的不想使用它,因为插入新节点要困难一些(尽管我确实意识到了它的重要性,但我宁可不必诉诸于它)。
我找到的下一个解决方案是在幻灯片53上的共享幻灯片中 (从此处StackOverflow的另一个答案中找到)。 该解决方案仅应查询节点的直接子级...该解决方案似乎不适用于我。
这是他们的解决方案:
SELECT * FROM Comments cl
LEFT JOIN Comments c2
ON(c2.parent_id = cl.comment_id);
现在,我的表有些不同,因此我调整了一些代码。 我的桌子的简要摘录如下:
Table: category
id | parent | section | title | ...
----+--------+----------+----------+-----
1 | NULL | home | Home | ...
2 | NULL | software | Software | ...
3 | 2 | software | Desktop | ...
4 | 2 | software | Mobile | ...
5 | NULL | about | About | ...
6 | 5 | about | Legal | ...
... | ... | ... | ... | ...
当我修改上面的查询时,我做了以下事情:
SELECT * FROM category cat1
LEFT JOIN category cat2
ON(category.parent = cl.id);
这导致一切都被查询并绑在一个表中,是未更改表的两倍(显然这不是我要查找的内容)
我可以肯定我的查询做错了什么,所以我只是希望这里的人可以纠正我的错误,并为我指明正确的方向。
我知道使用嵌套集模型应该更容易,但是我不喜欢该选项,因为它很难添加新选项。
看起来你很亲近。 您的左联接确保将返回表中的所有记录。
请参阅以下查询。
SELECT c1.*, c2.id FROM category c1 INNER JOIN category c2 ON (c1.parent = c2.id);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.