我试图根据另一个表中字段的MAX()值在CakePHP中选择数据库行。这是我尝试执行的SQL:

SELECT `questions`.* FROM `tests`,`questions` GROUP BY `questions`.`id` HAVING  `questions`.`test_id` = MAX(`tests`.`id`);


(或等效的方法。基本上,我试图从问题表中获取所有行,其中test_id等于测试表中的最高ID值。)

我使用find()在CakePHP中能够执行的最接近的操作是运行两个查询的操作:

$current_test = $this->find('first',array('fields'=>array('MAX(Test.id) as current_test')));

$questions = $this->find('all',array(
    'conditions'=>array('Question.test_id'=>$current_test[0]['current_test'])
));


它为我提供了所需的结果,但似乎没有必要。 CakePHP中是否可以将其放入单个查询中?

最佳答案

如果您正确地建立了模型关系,并且我了解您的数据库,那么下面的方法应该起作用(假设此代码是在测试模型内部编写的。如果它不在测试模型中(例如,在Controller中),则需要使用$ this-> Test-> find。

$test = $this->find( 'first', array(
    'order'     => 'Test.id desc',
    'recursive' => 1,
));


应该返回如下内容:

$test = array(
    [Test] => array(
        'id'  => X,
        'etc' => '...'
    ),

    [Questions] => array(
        [0] => array( 'test_id' => X, 'question_id' => 1  ),
        [1] => array( 'test_id' => X, 'question_id' => 7  ),
        [2] => array( 'test_id' => X, 'question_id' => 10 ),
    ),
);

关于mysql - 在CakePHP中基于MySQL函数查找,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6037233/

10-13 09:51