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

博格丹·祖拉克(Bogdan Zurac)

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,因为它类似于分组策略,但实际上并未将所有子级分组到单个行中。这种查询有什么解决方案?有更多类型的解决方案吗?

马丁·K

它没有测试,但我认为这也应该在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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

父母和孩子的订单查询

来自分类Dev

你如何在laravel eloquent中查询孩子和父母

来自分类Dev

你如何在laravel eloquent中查询孩子和父母

来自分类常见问题

在父母和孩子的表Laravel中插入行

来自分类Dev

在父母和孩子的表Laravel中插入行

来自分类Dev

SQL查询选择孩子和父母

来自分类Dev

MySQL从表中选择父母和孩子

来自分类Dev

父母和孩子中的点击事件

来自分类Dev

修改WordPress中父母和孩子的图标

来自分类Dev

如何在O(1)查询中同时过滤父母和孩子?

来自分类Dev

sql,从一张表中获取父母和孩子

来自分类Dev

查询以从父母和孩子那里检索缺陷

来自分类Dev

如何查询laravel中的深层关系并按孩子筛选父母?

来自分类Dev

实施一棵树,让孩子和父母可以互相参考

来自分类Dev

CQ模板中的“允许的父母和允许的孩子”属性

来自分类Dev

Java中的树实现(根,父母和孩子)

来自分类Dev

Caliburn.micro 父母->孩子和孩子->父母互动

来自分类Dev

如何编写查询以检查孩子在表中是否有孩子

来自分类Dev

在SwiftUI中从孩子的孩子调用父母的函数

来自分类Dev

LINQ查询以按孩子查找父母

来自分类Dev

OOP和C#中的自参考

来自分类Dev

如何在同一张表中找到父母和孩子

来自分类Dev

如何在一个查询中让所有孩子成为父母

来自分类Dev

汇总自参考表

来自分类Dev

汇总自参考表

来自分类Dev

联接自参考表

来自分类Dev

苗条:在父母和孩子之间转移道具

来自分类Dev

Laravel,由父母和孩子获得结果

来自分类Dev

我如何使用班级的父母和孩子?