Mysql 按日期和组父/子文档排序
我有一个数据库,里面有一些文档。某些文档具有与其关联的子文档。每个文档都有一列“createdat”。如果文档没有子文档,“iParentDoc”列为0。否则,该数字等于父项的docID列 基本上,我想主要按照Parentdoc的日期进行排序,子项应该按照日期进行排序,并直接显示在父项之后,例如Mysql 按日期和组父/子文档排序,mysql,sorting,Mysql,Sorting,我有一个数据库,里面有一些文档。某些文档具有与其关联的子文档。每个文档都有一列“createdat”。如果文档没有子文档,“iParentDoc”列为0。否则,该数字等于父项的docID列 基本上,我想主要按照Parentdoc的日期进行排序,子项应该按照日期进行排序,并直接显示在父项之后,例如 Parent Doc0 (id: 1, iParentDoc: 0, createdat: 01-01-2015) Parent Doc1 (id: 2, iParentDoc: 0, createda
Parent Doc0 (id: 1, iParentDoc: 0, createdat: 01-01-2015)
Parent Doc1 (id: 2, iParentDoc: 0, createdat: 01-01-2014)
- Child doc1 (id: 3, iParentDoc: 2, createdat: 01-02-2014)
- Child doc2 (id: 4, iParentDoc: 2, createdat: 01-03-2014)
当我根据“createdat”列更改DESC/ASC排序时,排序尤其会出现问题,因为我得到的结果是:
- Child doc2 (id: 4, iParentDoc: 2, createdat: 01-03-2014)
- Child doc1 (id: 3, iParentDoc: 2, createdat: 01-02-2014)
Parent Doc1 (id: 2, iParentDoc: 0, createdat: 01-01-2014)
Parent Doc0 (id: 1, iParentDoc: 0, createdat: 01-01-2015)
因此,排序(根据createdat DESC/ASC)应由父列和随后的子列进行。因此,它应该是:
Parent Doc1 (id: 2, iParentDoc: 0, createdat: 01-01-2014)
- Child doc1 (id: 3, iParentDoc: 2, createdat: 01-02-2014)
- Child doc2 (id: 4, iParentDoc: 2, createdat: 01-03-2014)
Parent Doc0 (id: 1, iParentDoc: 0, createdat: 01-01-2015)
我尝试了这个查询,但它给了我机会,特别是当排序被反转时
ORDER BY COALESCE( NULLIF(iParentDoc,0), id) DESC, NULLIF(iParentDoc,0) IS NOT NULL , createdat desc LIMIT 20
有人能帮忙吗?我也有类似的问题。
您可以添加另一列parent_createdat,并在iParentDoc中设置父id时插入父项的文档日期时间
然后:
ORDER BY COALESCE(NULLIF(parent_createdat,0), NULLIF(createdat,0)) DESC, createdat ASC