//消息属于用户
var $belongsTo = array(
'FromId'=>array(
'className'=>'User',
'foreignKey'=>'sender_id'
),
'ToId'=>array(
'className'=>'User',
'foreignKey'=>'recipient_id'
)); //end belongsto
sender_id号码1在2015-03-08 10:30:10发送“hi”给recipient_id 2
sender_id号码1在2015-03-08 11:00:20发送“Hello”给recipient_id 2
我的目的是选择最后一条消息(你好)和创建的最大日期(2015-03-08 11:00:20)
这是我的查询
$idAuth = $this->Auth->user('id');
$conversationInProgress = $this->Message->find('first', array(
'fields'=> array(
'ToId.id','Message.content', 'Message.conversation_id', 'MAX(Message.created) AS created'),
'conditions' => array(
'OR' => array(
array('Message.sender_id' => $idAuth),
array('Message.recipient_id' => $idAuth))),
'group' => 'Message.conversation_id',
'order' => array('Message.created DESC')));
在我的结果下面:
array(
'ToId' => array(
'id' => '2'
),
'Message' => array(
'content' => 'hi',
'conversation_id' => '0fb6dcd8e1'
),
(int) 0 => array(
'created' => '2015-03-08 11:00:20'
))
预期结果: 链接到最大创建的内容(2015-03-08 11:00:20)是“你好”而不是“你好”。
你能帮帮我吗。
由于
它适用于子查询,但我面临另一个问题
在我的代码下面
$conditionsSubQuery = array(
'OR' => array(
array('sender_id' => $idAuth),
array('recipient_id' => $idAuth)));
$db = $this->Message->getDataSource();
$subQuery = $db->buildStatement(
array(
'fields' => array('MAX(id)'),
'table' => $db->fullTableName($this->Message),
'alias' => 'SubTable',
'limit' => null,
'offset' => null,
'joins' => array(),
'conditions' => $conditionsSubQuery,
'order' => 'id DESC',
'group' => 'conversation_id'
),
$this->Message
);
$subQuery = ' Message.id IN (' . $subQuery . ') ';
$subQueryExpression = $db->expression($subQuery);
$conditions[] = $subQueryExpression;
$conversationInProgress = $this->Message->find('all', compact('conditions'));
$这 - >设置(紧凑( 'conversationInProgress'));
此查询显示正确的内容和正确的ID 但即使我将'order'设置为'id DESC',它也会在id号17之前显示id号15
结果应该是: 第一条记录:id 17和 第二条记录:id 15
有办法解决这个问题吗?
谢谢