【发布时间】:2013-11-26 18:51:55
【问题描述】:
我正在使用一组相当复杂的条件进行find('all'):
array(
'conditions' => array(
(int) 0 => 'Attempt.test_id = 8',
(int) 1 => 'Attempt.score > 60',
(int) 2 => array(),
(int) 3 => array(
(int) 0 => 'Resume.has_file = 1'
)
),
'joins' => array(
(int) 0 => array(
'table' => 'attempts',
'alias' => 'Attempt',
'type' => 'LEFT',
'conditions' => array(
(int) 0 => 'Attempt.user_id = User.id AND Attempt.test_id != 5'
)
)
),
'contain' => array(
(int) 0 => 'Resume',
(int) 1 => 'Attempt',
(int) 2 => 'Tag'
),
'group' => 'User.id',
'limit' => (int) 1,
'fields' => array(
(int) 0 => 'User.id',
(int) 1 => 'Resume.id'
)
)
返回的数据如下所示:
array(
(int) 0 => array(
'User' => array(
'id' => '381'
),
'Resume' => array(
'id' => '15'
),
'Attempt' => array(
(int) 0 => array(
'id' => '16072',
'user_id' => '381',
'test_id' => '8',
'status' => 'complete'
),
(int) 2 => array(
'id' => '16073',
'user_id' => '381',
'test_id' => '8',
'status' => 'complete'
)
查询需要永远运行一天,我只需要 User.id,所以我试图去掉不需要的字段。它适用于 hasOne 关联,但 hasMany 与文档中的语法不匹配。例如,'limit'=>array('Attempt.id') 会抛出错误,因为没有 $user['Attempt']['id']。相反,它是 $user['Attempt'][#]['id']。
我该怎么做?我也很想听听任何其他可以加快查询速度的建议。
【问题讨论】:
标签: php cakephp join cakephp-2.0 query-optimization