2013-10-08 62 views
0

我',学习CakePHP,但我有一个与更复杂的数据库查询操作很大的问题。 所以我想执行该类型的查询: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机制?

+0

您是否试图在此SQL语句的Book模型上使用find()方法? – AgRizzo

回答

3

你的代码应该与此类似,假设图书电子工程是关系(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' 
    ) 
); 
+0

太棒了,我认为这是我一直在寻找的东西:) Thx – bbbb

0

使用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