2013-12-16 85 views
1

我有以下的Zend SQL查詢:Zend的SQL - 有條件的where子句

$select = $this->select() 
->where($this->_quote('VerDate <= ?', $todate)) 
->where($this->_quote('VerFieldId = ?', $fieldid)); 
if (count($records) > 0) { 
    $this->select()->where($this->_quote('VerRecordId IN (?)', $records)); 
} 
$this->select()->group('VerRecordId'); 

我只想增加對VerRecordId WHERE條件如果$陣列記錄已傳遞給函數。

當我運行查詢時,它停止在VerFieldId的where子句之後。

任何人都可以幫助我需要做什麼來修改查詢嗎?

更新:

我已經使用以下代碼解決了該問題。但是,如果有人知道這是否可以更好地構造,請讓我知道。

$where = array(); 
$where['VerDate <= ?'] = $todate; 
$where['VerFieldId = ?'] = $fieldid; 
if (count($records) > 0) { 
    $where['VerRecordId IN (?)'] = $records; 
} 
$select = $this->select(); 
$this->_where($select,$where); 
$select->group('VerRecordId'); 

這使我有條件地添加VerRecordId條件。

回答

0

ZF2

$sql = new Sql($this->adapter); 
      $select = new Select($this->table); 
      $where = new \Zend\Db\Sql\Where(); 
      $where->equalTo('field1',(string) $value1); 
      $where->greaterThan('field2','value2') ; 
      $where->equalTo('field3','value3'); 
      $select->where($where); 
      $statement = $sql->prepareStatementForSqlObject($select); 
      $result = $statement->execute(); 

ZF1

$select = $this->select();  
$select->setIntegrityCheck(false) // if you have joins 
      ->from(array('tablename' => 'tablename',)) 
      $select->where('field = ?', $value); 
$select->where(new Zend_Db_Expr("field <> 'value'")); 
     $result = $this->fetchAll($select); 

,然後你可以循環的$結果

我希望它可以幫助你

http://framework.zend.com/manual/2.2/en/modules/zend.db.sql.html

+0

嗨Amarjit,感謝您的回覆。我忘了提及我正在使用Zend Framework版本1.11.11,我不確定你可以使用上面描述的符號嗎? – Naomi

+0

這是zf2。 –

+0

我也爲zf1添加了 –