Php 如何优化分页查询?
这是一个完全优化的问题,我有一个这样的分页查询Php 如何优化分页查询?,php,cakephp,optimization,Php,Cakephp,Optimization,这是一个完全优化的问题,我有一个这样的分页查询 $this->paginate = array( 'fields' => array( 'DISTINCT Contact.contact_id', 'Contact.first_name', 'Contact.last_name',
$this->paginate = array(
'fields' => array(
'DISTINCT Contact.contact_id',
'Contact.first_name',
'Contact.last_name',
'Contact.email',
'Contact.created',
'ContactGroup.name',
),
'conditions' => array(
$this->conditions,
'ContactsContactGroup.contact_group_id'=>$viewList,
isset($keywordQuery)?$keywordQuery:"",
),
'limit' => 5,
'group' => array('Contact.contact_id')
);
$data = $this->paginate('ContactsContactGroup');
$data = $this->paginate('ContactsContactGroup');
在每个if和else语句中都会调用此查询,我有四个条件if
和else
,并且在所有条件下都会编写上述代码
我想优化,避免在任何情况下都出现大量代码,我如何优化它,任何答案都将受到赞赏。您可以使用类中的另一个方法返回数组,而不是到处发布。添加以下代码
private function getPaginate($viewList, $keywordQuery) {
$this->paginate = array( 'fields' => array( 'DISTINCT Contact.contact_id', 'Contact.first_name', 'Contact.last_name', 'Contact.email', 'Contact.created', 'ContactGroup.name', ), 'conditions' => array( $this->conditions, 'ContactsContactGroup.contact_group_id'=>$viewList, isset($keywordQuery)?$keywordQuery:"", ), 'limit' => 5, 'group' => array('Contact.contact_id') );
//optional: return the result
return $this->paginate;
}
然后你可以使用
$this->getPaginate( $viewlist, $keywordQuery );
$data = $this->paginate('ContactsContactGroup');
$data = $this->paginate('ContactsContactGroup');
我在搜索页面上经常使用的方法是在if和else中不断添加条件,并将其连接到主查询的末尾。在你的情况下,我认为我们可以做到如下:
//here is your if and else statement
$condition = array();
if(someconditions) {
$condition['user'] = 'suresh'; //your conditions
else if(some conditions)
$condition['email'] ='abc@gmail.com';
//And than add it to main query
$this->paginate = array(
'fields' => array(
'DISTINCT Contact.contact_id',
'Contact.first_name',
'Contact.last_name',
'Contact.email',
'Contact.created',
'ContactGroup.name',
),
'conditions' => array(
$condition
'ContactsContactGroup.contact_group_id'=>$viewList,
isset($keywordQuery)?$keywordQuery:"",
),
'limit' => 5,
'group' => array('Contact.contact_id')
);
$data = $this->paginate('ContactsContactGroup');
$data = $this->paginate('ContactsContactGroup');
如果所有条件都是相同的,请在上面写下您的如果。。。else语句。那么在这种情况下我如何调用分页?您在if和else中究竟写了什么。你能提供一些信息吗..这些是我的if和else语句if($viewList!=“all”)&&$viewList!=“dynamic”)和}elseif($viewList==“dynamic”){主要的区别是我在elseif语句的分页中添加了一个条件。您正在对同一字段使用DISTINCT和GROUP BY。啊,我看到viewList有一个大写的L,我遗漏了。更改了它