回答

收藏

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

技术问答 技术问答 291 人阅读 | 0 人回复 | 2023-09-14

我在 MySQL中*    有以下 注释    表: *; J  Y2 @' U0 }) r% d! H0 w* `
content           created_at                 id  parent_id"second comment",2014-06-03T     -1"third comment", 2014-06-03T10:10:35 万, 40,    -1"Under third",   2014-06-03T10:10:44 万, 41,   40"Under second",  2014-06-03T    37用户可以添加 新的    注释,因为它们不是其他注释的子对象,所以将没有parent_id。用户也可以 回复$ Y# g! y' V+ `. L2 A: A4 o9 i
通过以前的方法添加评论,它们是主要评论的子级,如第二级。PARENT_ID
; J. N( \7 c4 \3 R列表父评论ID,如果存在。如果注释没有父母,默认 parent_id    为-1。4 ^9 C" k( y) h' e* a6 _0 S
尽管如此,我还是想查询表格中的所有注释,每个父项跟随其子级,按created_at ASC 排序    。上述数据集的示例:
6 M: s, u- _. d+ b* c- o* Msecond commentUnder secondthird commentUnder third我考虑使用GROUP BY,因为它类似于分组策略,但实际上并没有将所有子级分组到单行。这种查询的解决方案是什么?有更多类型的解决方案吗?; j0 W+ a5 D; w
                                                               
6 M0 d' \* x, W5 ~( V# D    解决方案:                                                               
+ c* j8 V6 k& g2 o3 H% |/ A# u                                                                它没有测试,但我认为应该是MySQL中工作:; m" ]4 i) |; V* S+ A/ j
ORDER BY CASE WHEN parent_id=-1 THEN id ELSE parent_id END,created_at编辑:    如果你不能假设ID以与注释相同的逻辑顺序升序会变得更加复杂:
! J3 x; l3 C5 ^! v7 D: O" _9 eSELECT parent_id,id,created_at parent_date,null child_date,content    FROM Comments    WHERE parent_id=-1UNIONSELECT c.parent_id,c.id,p.created_at as parent_date,c.created_at as child_date,c.contentFROM Comments c    JOIN (SELECT id,created_at,content            FROM Comments            WHERE parent_id=-                                                                                                                                                                                                                                                                                                                                  GROUP BY id,created_at,content) p ON p.id=c.parent_idORDER BY parent_date,child_date
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则