Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按日期和组父/子文档排序_Mysql_Sorting - Fatal编程技术网

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

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

我有一个数据库,里面有一些文档。某些文档具有与其关联的子文档。每个文档都有一列“createdat”。如果文档没有子文档,“iParentDoc”列为0。否则,该数字等于父项的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)应由父列和随后的子列进行。因此,它应该是:

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