私はフォトギャラリープロジェクトに取り組んでいます。最近作成された 20 個のアルバムを一覧表示し、それらのアルバムの最近アップロードされた写真 (ある場合) も表示したいと考えています。私が現在行っている方法は、アルバム ( $this->Album->find('all', ...)
) をクエリし、それらの結果の ID を 2 番目のクエリに渡すことです。これは、最初のクエリで見つかった 20 のアルバムの最新のアップロードされた写真を見つけるクエリです。
実際のクエリは次のようになります。
SELECT `Album`.`id`, `Album`.`name`, `Album`.`photo_count` FROM `mydb`.`albums` AS `Album` WHERE 1 = 1 ORDER BY `Album`.`created` DESC LIMIT 20
SELECT `Photo`.`album_id`, `Photo`.`name` FROM `mydb`.`photos` AS `Photo` WHERE `Photo`.`album_id` IN (21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2) GROUP BY `Photo`.`album_id` ORDER BY `Photo`.`created` DESC
2 つのクエリを実行するのは好きではなく、その 2 番目のクエリはかなり非効率に見えます。CakePHP にこれを 1 つの効率的なクエリで実行させる方法はありますか?