按日期和组父/子文档排序

时间:2015-08-31 16:44:46

标签: mysql sorting

我有一个包含一些文档的数据库。某些文档具有与之关联的子文档。每个文档都有一个“createdat”列。如果文档没有子项,则“iParentDoc”列为0.否则,Number等于父项的列docID。

基本上我想主要按Parentdoc的日期排序,孩子应按日期排序,并直接显示在父母之后,例如

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)总是由Parentcolums和孩子们随后进行。所以它应该是:

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

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我有类似的问题。 您可以添加另一列parent_createdat,并在iParentDoc中设置父ID时插入父文档的日期时间。

然后:

ORDER BY COALESCE(NULLIF(parent_createdat,0), NULLIF(createdat,0)) DESC, createdat ASC