我有一个非常基本的分页符查询,在我将DISTINCT放在其中一列之前一直正常工作。
以下作品:
$this->paginate = array(
'conditions' => array(Message.recipient_id' => $this->Auth->user('id')),
'fields' => array(
'DISTINCT Message.sender_id',
'Message.recipient_id',
'Message.thread_id',
),
'limit' => 15,
'order' => array('Message.created' => 'DESC')
);
此查询无效:
$this->paginate = array(
'conditions' => array(Message.recipient_id' => $this->Auth->user('id')),
'fields' => array(
'DISTINCT Message.sender_id',
'Message.recipient_id',
'Message.thread_id',
// If I add any of the following columns, the DISTINCT doesn't work at all
'Message.created',
'Message.modified',
'Message.id'
),
'limit' => 15,
'order' => array('Message.created' => 'DESC')
);
为什么'字段中的其他任何列都会出现?选项会使DISTINCT关键字绊倒吗?
对我来说没有任何意义。
答案 0 :(得分:0)
如果你的意思是"它没有工作"尽管使用了不同的列,您将获得具有相同sender_id的多条消息...然后原因是因为当使用带有distinct关键字的多个列时,它会查找所有列的唯一组合。 Message.created,Message.modified和Message.id在大多数或所有时间每行都是唯一的,因此这些列本身将使您的字段组合不同。请尝试使用Message.sender_id组。
$this->paginate = array(
'conditions' => array(Message.recipient_id' => $this->Auth->user('id')),
'fields' => array(
'Message.sender_id',
'Message.recipient_id',
'Message.thread_id',
'Message.created',
'Message.modified',
'Message.id'
),
'limit' => 15,
'order' => array('Message.created' => 'DESC'),
'group' => array('Message.sender_id'),
);