mysql - CakePHP 和 MySQL - 使用 find ('all' ),其中一个字段使用 GROUP,另一个字段使用 MAX

标签 mysql cakephp

我有一个包含 3 列的 MySQL 表(thread_idmessage_idmessage)。沿着此 link 中的“使用 GROUP BY 的示例”下找到的解决方案,我希望查询按 thread_id 进行分组,但返回每个 thread_id 的最高 message_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'
));

现在,不幸的是我没有得到格式良好的数组。相反,我得到一个看起来像这样的数组:

Array ( [0] => Array ( [0] => Array ( [message_id] => Want/Correct_message_id ) [Model] => Array ( [message] => 来自最低/不需要的 message_id 行的消息。 [thread_id ] => 来自最低/不需要的 message_id 行的 key ))

为什么 message_id 没有挂接到数组的 [Model] 部分,为什么 CakePHP 会获取最低的 message_id 行并将 messagethread_id 放入数组的 [Model] 部分,而不包含 message_id 列?

我想要数组的 [Model] 部分中的所有三列,并且我希望该行成为该 thread_id 的最高 message_id > 根据我最初的描述。希望这个问题有意义。

最佳答案

虚拟字段对于这种事情非常有用。

class MyModel extends AppModel {

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

}

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

关于mysql - CakePHP 和 MySQL - 使用 find ('all' ),其中一个字段使用 GROUP,另一个字段使用 MAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12945115/

相关文章:

php - 带有限制和偏移量的 CodeIgniter sql 查询不显示结果

正在处理的 MySQL 异常处理程序访问异常

php - CakePHP 中 SSL 的最佳实践

javascript - Cakephp 多个表单 1 提交按钮

jquery - 同一 Ajax 请求中的 POST 和 Get

mysql - 连接到 Amazon RDS 实例的握手不活动超时

mysql - 是否可以使 MySQL Db 在没有 UPPER() 函数的情况下以大写形式存储数据

MYSQL 到 CakePHP

php - 如何在 cakephp 中使用 session 打印用户名?

获取匹配 parent 的mysql mariadb LIKE搜索