当前位置: 首页 > 面试题库 >

在自参考表中查询父母和孩子

印子平
2023-03-14
问题内容

我在 MySQL中* 有如下的 注释 表: *

content           created_at                 id  parent_id
"second comment", 2014-06-03T10:08:44+0000,  37,      -1
"third comment",  2014-06-03T10:10:35+0000,  40,      -1
"Under third",    2014-06-03T10:10:44+0000,  41,      40
"Under second",   2014-06-03T10:11:59+0000,  42,      37

用户可以添加 新的 注释,因为它们不是其他注释的子对象,所以将没有parent_id。用户还可以 回复
通过先前方法添加的评论,因此它们是主要评论的子级,例如在第二层级上。该 PARENT_ID
列表示父评论的ID,如果存在的话。如果注释没有父母,则默认 parent_id 为-1。

话虽如此,我想查询表中的所有注释,每个父项后跟其子级,按created_at ASC 排序 。来自上述数据集的示例:

second comment
Under second
third comment
Under third

我考虑使用GROUP BY,因为它类似于分组策略,但实际上并未将所有子级分组到单个行中。这种查询的解决方案是什么?有更多类型的解决方案吗?


问题答案:

它没有测试,但我认为这也应该在MySQL中工作:

ORDER BY CASE WHEN parent_id=-1 THEN id ELSE parent_id END, created_at

编辑: 如果您不能假设ID以与注释相同的逻辑顺序升序,则会变得更加复杂:

SELECT parent_id,id,created_at parent_date,null child_date,content
    FROM Comments
    WHERE parent_id=-1
UNION
SELECT c.parent_id,c.id,p.created_at as parent_date,c.created_at as child_date,c.content
FROM Comments c
    JOIN (SELECT id,created_at,content
            FROM Comments
            WHERE parent_id=-1
            GROUP BY id,created_at,content) p ON p.id=c.parent_id
ORDER BY parent_date,child_date


 类似资料:
  • 问题内容: 我正在阅读elasticsearch的文档,此[page] [1]讨论了使用将孩子映射到父类型。 如果我有被称为孩子的父母,则被称为: 每种类型的字段: 我怎么能在搜索领域和领域的前提是的是? 有没有办法让父母拥有的所有孩子(某种类型或任何类型)? 在索引子文档时,是否可以将父对象作为对象属性传递给JSON数据,而不是将其作为查询字符串的一部分? 在尝试了imotov的建议之后,我想到

  • 问题内容: 使用Spring和Hibernate,我可以在自引用类的父级/子级和另一个类之间实现一对多关系。也就是说,这是自引用类: D B: 模型: 现在,我想为父母/孩子(经理/雇员)和另一个这样的类创建一对多的关系: 因此,经理和员工都将与一个或多个课程相关联。课程课程: 这是我要实现的内容的概述,但我想知道这是否可能,如果可以,如何在数据库关系中进行设置,并能够通过hibernate将关系

  • 问题内容: 我有一个表作为(id,category_id,…),然后它的类别表为(category_id,category_name,parent,…)ON。父级是另一个类别的category_id。例如: 如何发布帖子和分类表,以阅读帖子的父类别。例如, 通过简单的category_id,我只能得到PHP作为类别。我怎么也能得到父母呢? 注意: 我将mysql与MyISAM引擎一起使用。 问题答

  • 我正在做一个物理模拟。 我有一个,它保存模拟中的所有对象。我有一个父类:,还有两个子类:和。 当然,父类没有方法,但每个子类都有。因此,当我在列表中循环绘制每个元素时,它不允许我这样做,因为类中没有方法(因为我将列表定义为

  • d3.js树形布局是一个很棒的工具,但是它默认只允许孩子有一个单亲。我希望能够让孩子们有不止一个父母。我对树的默认行为提供的节点位置很满意。我想要的只是在默认树被计算出来之后,在没有孩子的父母和现有的孩子之间画出额外的对角线链接。我的脚本目前看起来像这样: 我试图使用根对象将父节点的子节点复制到无子节点,但无济于事(根对象的结构对我来说非常晦涩难懂)。 感谢任何帮助。 PS :我知道一个类似的问题

  • 问题内容: 我有下面的结构。我使用 Golang 1.9.2 。 一个 活动 (了解营销活动)是由 事件 或 地点 可以与(基本或溢价)的水平而提高。广告活动有开始日期和结束日期,推广活动也是如此。 函数必须返回给定事件的级别。 如果事件在 有效的广告系列中 被增强(is ),并且 增强被激活 (is )并且 现在日期在boost的开始日期和结束日期之间 ,则我的Event被 增强 ,因此该函数返