0

thread_id3 つの列 ( 、message_id、 )を持つ MySQL テーブルがありますmessageこのリンクの「GROUP BY を使用した例」の下にあるソリューションの行に沿って、クエリを GROUP BY にしたいのですthread_idmessage_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'
));

残念ながら、うまくフォーマットされた配列を取得できません。代わりに、次のような配列を取得します。

Array ( [0] => Array ( [0] => Array ( [message_id] => want/correct_message_id ) [Model] => Array ( [message] => 最低/不要な message_id 行からのメッセージ。 [thread_id] =>最低/不要な message_id 行からのキー))

message_idが配列の一部に引っ掛からないのはなぜですか? [Model]CakePHP が一番下のmessage_id行を取得して、列のない配列の部分にmessageandthread_idを挿入するのはなぜですか?[Model]message_id

配列の一部に 3 つの列すべてが必要であり、最初の説明に従って、その[Model]行が最も高くなるようにしたいと考えています。この質問が理にかなっていることを願っています。message_idthread_id

4

1 に答える 1

1

仮想フィールドは、この種のことに非常に役立ちます。

class MyModel extends AppModel {

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

}

テーブル内の通常のフィールドであるかのように max_message_id を使用できるようになったため、検索操作に追加できます。

于 2012-10-18T16:33:22.580 に答える