【发布时间】:2015-11-25 18:30:07
【问题描述】:
我有一个数据库,里面有一些文档。一些文档具有与之关联的子文档。每个文档都有一个“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
有人可以帮忙吗?
【问题讨论】: