我正在使用ZEND MVC框架,在我的模态部分(表部分)中执行查询后,查询返回12行。我正在传递服务部分中返回的行,并进一步将结果传递给控制器,这将为我提供前端的最终视图。
我想在视图部分中将行数限制为3。我不能在我的查询中使用LIMIT 3,因为我进一步与其他查询进行交互并比较结果,所以我需要拥有所有12行。是否有可能以某种方式将限制放在服务部分?
这是我的代码。虽然我不需要把我的代码放在每一位,但这会给出一个清晰的想法。
模态(表格部分)
public function getJobTopStatements( UserJobEntity $activeJob, $intervalInMonths = NULL ){
if($intervalInMonths){
$interval = ' AND ss.datetime < ADDDATE( NOW(), INTERVAL -'.$intervalInMonths.' MONTH) ';
}
$testQuestionTable = $this->getServiceLocator()->get('testQuestionTable');
$questionAnswerTable = $this->getServiceLocator()->get('questionAnswerTable');
$testAnswerTable = $this->getServiceLocator()->get('testAnswerTable');
$query = 'SELECT
t.id,
t.text,
t.key,
s.answer
FROM '. $testQuestionTable->getTable() .' AS t
LEFT JOIN '. $questionAnswerTable->getTable() .' as s ON (s.testQuestionId = t.id)
LEFT JOIN '. $testAnswerTable->getTable() .' as m ON (m.id = s.testAnswerId AND
m.id = (SELECT MAX(ss.id)
FROM ' . $testAnswerTable->getTable() . ' as ss
WHERE ss.userJobId = '. $activeJob->getId() .'
'.$interval.'
)
)
WHERE m.userJobId = '. $activeJob->getId() .'
GROUP BY t.id
ORDER BY m.id DESC, s.answer DESC';
return $this->adapter->query($query, 'execute')->toArray();
}
此查询返回12行,我将结果传递到服务部分,如下所示
public function getActiveJobTopStatements(){
$activeJob = $this->userService->getUserActiveJob();
if(!$activeJob){
return array();
}
$result = $this->testAnswerTable->getJobTopStatements( $activeJob );
return $result;
}
最后控制器部分返回此视图
$view->jobTopStatements = $testAnswerService->getActiveJobTopStatements();
我有什么方法可以在服务部分设置限制,这样它只会传递3行而不是12行?