我对线程评论有疑问 . 是否可以从此查询(或表级)订购注释DESC和子注释ASC,还是应该进行后查询修改?
您可以在下面找到我的查询,命令所有DESC .
```java
$comments = $this->Comments
->find('threaded', ['order' => ['Comments.created' => 'DESC']])
->contain(['Users'])
->matching(
'BoardItems',
function ($q) use ($boardItemId) {
return $q->where(
[
'BoardItems.id' => $boardItemId
]
);
}
)
->all();
1 回答
在SQL级别上
您应该能够应用 MySql: ORDER BY parent and child 中建议的解决方案
使用
COALESCE
对父母进行分组/排序通过测试非
NULL
父ID来对子项进行分组对分组的子项进行排序
在你的情况下,你按
created
而不是id
排序,即类似的东西要以适当的查询构建器方式构建它,您必须使用
order()
和orderDesc()
方法,以便您可以使用查询表达式,类似于也可以看看
Cookbook > Database Access & ORM > Query Builder > Selecting Data
Cookbook > Database Access & ORM > Query Builder > Using SQL Functions
Cookbook > Database Access & ORM > Query Builder > Advanced Conditions
在PHP级别
之后对事物进行排序也是一种选择,例如使用递归结果格式化程序:
这将检索所有降序排序,然后按
created
字段对所有children
数组进行排序 . 类似地,您可以在视图中输出/使用它们之前对事物进行排序,具体取决于您计划对结果做些什么 .如果你想保留表中的内容,你可以将它全部包装在自定义查找程序中和/或通过表类上的方法检索排序闭包 .
也可以看看
Cookbook > Collections > Sorting
Cookbook > Collections > Iterating