CakePHP& MySQL - 将find('all')与GROUP用于一个字段,MAX用于另一个字段

时间:2012-10-17 23:44:50

标签: mysql cakephp

我有一个包含3列(thread_idmessage_idmessage)的MySQL表。在link的“使用GROUP BY的示例”下找到的解决方案的行,我希望我的查询到GROUP BY thread_id,但返回最高message_id的行(每个thread_id代替默认最低值。然后,我想要一个带有行/项的格式良好的数组,就像你在CakePHP中沿着$array[index]['Model']['field']行获得不那么复杂的查找操作一样。使用以下CakePHP语法:

$this->Model->find('all', array(
   'fields' => array('MAX(Model.message_id) as message_id', 'Model.thread_id', 'Model.message'),
   'group => 'Model.thread_id'
));

现在,不幸的是我没有得到格式良好的数组。相反,我得到一个类似于:

的数组

数组([0] =>数组([0] =>数组([message_id] =>想要/ correct_message_id)[型号] =>数组([消息] =>来自最低/不需要的消息message_id line。[thread_id] =>来自最低/不需要的message_id行的密钥))

为什么message_id没有被连接到数组的[Model]部分,为什么CakePHP获取最低message_id行并放置message和{{1没有thread_id列的数组的[Model]部分?

我想要数组的message_id部分中的所有thre列,并且我希望根据我的初始描述,该行是[Model]的最高message_id。希望这个问题有道理。

1 个答案:

答案 0 :(得分:1)

虚拟字段对于此类事情非常有用。

class MyModel extends AppModel {

    public $virtualFields = array(
        'max_message_id' => 'MAX(MyModel.message_id)'
    );

}

您现在可以使用max_message_id,就好像它是表格中的普通字段一样,因此您可以将其添加到查找操作中。

相关问题