我在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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句