2013-03-13 2 views
1

Это полностью оптимизация вопрос, у меня есть пагинация запрос, как этотКак оптимизировать запрос разбивки на страницы?

$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, и во всех условиях выше кусок код написан.

Я хочу оптимизировать и избегать большой строки кода в каждом состоянии, как я могу его оптимизировать, любой ответ будет оценен.

+0

Если это распространено для всех условий, чем писать над ваши утверждения if ... else. –

+0

то как я могу назвать разбивку на страницы в этом состоянии? – user2046638

+0

что именно вы пишете в if и else. вы можете предоставить некоторую информацию об этом .. –

ответ

1

Вы можете использовать другой метод в своем классе, который вернет массив, а не публикует его везде. Добавьте следующий код

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'); 
+0

Я пробовал это, но результат не получил. – user2046638

+0

ah Я вижу viewList имеет прописную букву L, которую я пропустил. Изменил его –

+0

Да, он очень помог. – user2046638

1

Что я использую в качестве регулярной практики на странице поиска я держать добавить условие в том и другом месте и сцепить его в конце концов основного запроса , В вашем состоянии я думаю, что мы можем сделать, как показано ниже:

//here is your if and else statement 
$condition = array(); 
if(someconditions) { 
$condition['user'] = 'suresh'; //your conditions 
else if(some conditions) 
$condition['email'] ='[email protected]'; 

//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'); 
Смежные вопросы