Я, изучая CakePHP, но у меня есть большая проблема с работой с более сложными запросами базы данных. Поэтому я хотел бы выполнить такой запрос:
SELECT p.name, b.value FROM books b LEFT JOIN projects p ON b.project_id=p.id WHERE b.created= (SELECT max(b.created) FROM books b WHERE b.user_id=1) AND b.user_id=1 GROUP BY p.name
Может ли кто-нибудь помочь мне написать это с помощью механизма cakePHP для подготовки запросов?
Ваш код должен быть чем-то подобным, предполагая, что Book e Project находится в отношениях ( Book
принадлежит Project
)
$this->Book->find ( 'all', array ( 'fields' => array('Book.value', 'Project.name'), 'conditions' => array ( 'Book.created IN (SELECT MAX(Book.created) FROM books Book WHERE Book.user_id = 1)', 'Book.user_id' => 1 ), 'group' => 'Project.name' ) );
Используйте пункт IN.
SELECT p.name, b.value FROM books b LEFT JOIN projects p ON b.project_id=p.id WHERE b.created IN (SELECT max(created) FROM books WHERE user_id=1) AND b.user_id=1 GROUP BY p.name
если книги и проекты являются моделями, вы можете использовать модель книги для прямого соединения с помощью функции CakePHP, см. https://stackoverflow.com/a/16286735/2858188
Отправьте эту ссылку http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#sub -queries для написания подзапросов, следуя соглашениям cakephp.