我试图根据另一个表中字段的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/