2013-03-13 71 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語句,我有ifelse四個條件,並在任何情況下上面這段代碼被寫入。

我想優化,並避免在每種情況下的大量代碼,我如何優化它,任何答案將不勝感激。

+0

如果所有條件都比在if ... else語句之上寫的更爲常見。 – 2013-03-13 06:07:10

+0

那我該如何在這種情況下調用分頁? – user2046638 2013-03-13 06:10:03

+0

你在if和else中寫什麼。如果($ viewList!=(「all」)&& $ viewList!=(「dynamic」))和elseif($ viewList ==「dynamic」)可以提供一些信息。 – 2013-03-13 06:11:45

回答

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 2013-03-13 06:23:29

+0

啊我看到viewList有一個大寫的L,我錯過了。改變了它 – 2013-03-13 06:33:50

+0

是的,它的工作非常感謝。 – user2046638 2013-03-13 07:03:33

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