我有一个包含 3 列的 MySQL 表(thread_id
、message_id
、message
)。沿着此 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
行并将 message
和 thread_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/