2013-01-16 28 views
0

我想知道如何在這種情況下使用Zend寫正確的MySQL聲明:MySQL的聲明Zend框架DB_TABLE

SELECT * FROM `users` WHERE role_id = 2 AND status = 2 AND bddate BETWEEN '1988-05-07' AND '1991-01-01' ORDER BY lastname DESC 

,我將不得不如果報表前。如果在篩選器用戶選擇的role_id中,我將它包含在WHERE等等中,與其餘的一樣。

到目前爲止,我有1 WHERE條件,我已經做了這樣的(現在我需要更復雜的一個):所以你有與之間的問題

$select = $this->select() 
      ->setIntegrityCheck(false) 
      ->from(array('u'=>'users')) 
      ->join(array('r'=>'user_roles'), 'u.role_id = r.role_id', array('role'=>'title'));   
    if(count($filters) > 0) { 
     foreach($filters as $field => $filter) { 
      $select->where($field . ' = ?', $filter); 
     } 
    } 

    if(null != $sortField) { 

     $select->order($sortField); 

    } 
+0

我真的不明白你的問題。看起來你已經能夠建立一個查詢。那麼,你的第一個陳述/你到底有什麼問題呢? – mpaepper

+0

我寫了查詢,但如何爲ZEND_DB執行此操作?在我的代碼中,我只有1個WHERE,並且在我想要實現的新語句中,我還有幾個除了BETWEEN – mrGott

回答

3

好吧,。有兩種可能的解決方案是:

一)您使用兩個where子句對分裂的間,讓您得到

$select = $this->select() 
//... other conditions 
    ->where('bddate >= ?', '1988-05-07') 
    ->where('bddate <= ?', '1991-01-01'); 

OR

B)

$select = $this->select() 
//... other conditions 
    ->where ('bddate BETWEEN '1988-05-07' AND '1991-01-01'); 

我會建議選項a),因爲它正確地逃避了你的價值。

+0

之外的所以我可以做很多 - >我想要哪裏? (根據你的例子來判斷) – mrGott

+0

@Mikey是的,你可以。他們都和他們在一起。 「foreach($ filters as $ field => $ filter){ $ select-> where($ field。'=?',$ filter); }」 – mpaepper

+0

好的,謝謝!我現在就試試看 – mrGott