Cakephp 3 でソーシャル アプリケーションを開発しています。
私は今、メッセージ機能に取り組んでいます。このように機能し、左側にユーザーが表示され、会話をしているユーザーが表示され、真ん中に会話が表示されます。
ユーザーを最後のメッセージの日付で並べ替えたい。つまり、私が最後に書いたのが Peter だった場合、Peter が一番上に表示されるはずです。
次のクエリがあります。
$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 によるグループ化を追加しました。すべてのメッセージを受信するのではなく、これまでに書いたユーザーだけを見つけたいからです。
問題は、グループステートメントがソートを破壊することです。そこで、順序を維持するために max-aggregate-function を考えました。
ただし、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
?