Я работаю над проектом фотогалереи. Я хочу перечислить 20 недавно созданных альбомов, а также показать каждую недавно загруженную фотографию этих альбомов (если она есть). То, как я делаю это сейчас, - это запрос альбомов ($this->Album->find('all', ...)
), а затем передача идентификаторов из этих результатов в мой второй запрос, который является запросом, который находит самую последнюю загруженную фотографию для 20 альбомов, найденных по первому запросу.Объединение двух запросов в один с CakePHP
Это то, что фактические запросы выглядеть следующим образом:
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
Я не люблю делать два запроса, и что второй запрос выглядит весьма неэффективен. Есть ли способ сделать CakePHP сделать это в одном эффективном запросе?
Этот запрос вытаскивает правильные альбомы, но они отображаются в случайном порядке, а не в «Созданный DESC», как есть в подзапросе. Кроме того, вытаскиваемая фотография кажется самой старой, а не самой новой. Хотя я, безусловно, ценю ваши усилия! – Nick
@Nick - я обновил ответ, добавленный a.created в пункт запроса запроса по запросу. Удачи! – sgeddes
Спасибо, что фиксированная часть проблемы! Тем не менее, проблема заключается в том, что фотография не является правильной. – Nick