CakePHP paginate导致奇怪的DISTINCT行为

时间:2014-07-02 15:03:39

标签: php mysql cakephp pagination

我有一个非常基本的分页符查询,在我将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关键字绊倒吗?

对我来说没有任何意义。

1 个答案:

答案 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'),
);