我正在用 cakephp 3 开发一个社交应用程序。
我现在正在处理消息传递功能。它以这种方式工作,在左侧显示用户,与谁进行对话,中间是对话。
我希望用户按上次消息传递日期排序。意思是,如果彼得是我最后一个写信的人,那么彼得应该出现在最上面,依此类推。
我有以下查询:
$query = $this->Messages
->find('all', [
'fields' => [
'MAX(`messages`.`max_date`)',
'id',
'sender_id',
'reciever_id',
]
])
->where([
'sender_id = ' => $active_user_id
])
->orWhere([
'reciever_id = ' => $active_user_id
])
->group([
'sender_id',
'reciever_id'
])
->order([
'id' => 'DESC'
]);
出于性能原因,我添加了一个按 sender_id 和 reciever_id 分组,因为我不想接收所有消息,而只想找到我迄今为止写过的用户。
问题是 group-statement 破坏了排序。所以我想到了一个最大聚合函数来保留订单。
但是,我通过 cakephp 框架收到以下错误消息:
错误:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'MAX(`messages`__`max_date`), Messages.id AS `Messages__id`, Messages.sender_id A' 附近使用正确的语法
那么有人知道,我的查询有什么问题吗?我尽力遵循文档中的示例。
为什么它说messages
__max_date
而不是messages
。max_date
?