2011-05-20 51 views
0

我的SQL查询基于提供的数据。帮助在Zend中构建简单的SQL查询

例如:

// table 
$table = new Model_MyTable_DbTable(); 

// data  
$columns = array('column1', 'column2', 'column3'); 

// query   
$select = $table->select(); 
$select->where('deleted = ?', '0'); 

for($i = 0; $i < count($columns); $i++) { 
    if($i == 0) { 
      $select->where($columns[$i] . ' > ?', '0'); 
    } else { 
      $select->orWhere($columns[$i] . ' > ?', '0'); 
    } 
} 

$select->where('disabled = ?', '0'); 

// print query 
echo $select->assemble();die(); 

以上代码的结果为以下查询:

SELECT `mytable`.* FROM `mytable` WHERE 
(deleted = '0') AND 
(column1 > '0') OR (column2 > '0') OR (column3 > '0') AND 
(disabled = '0') 

但我想是这样的:

SELECT `mytable`.* FROM `mytable` WHERE 
(deleted = '0') AND 
(column1 > '0' OR column2 > '0' OR column3 > '0') AND 
(disabled = '0') 

这怎么可能?

感谢

回答

5

我想这应该做的工作:

// table 
    $table = new Model_MyTable_DbTable(); 

    // data  
    $columns = array('column1', 'column2', 'column3'); 

    // query   
    $select = $table->select(); 
    $select->where('deleted = ?', '0'); 

    $myOrParts = array(); 

    for ($i = 0; $i < count($columns); $i++) {             
      $myOrParts []= $table->getAdapter()->quoteInto($columns[$i] . ' > ?', '0');   
    } 

    $myWhere = implode(' OR ', $myOrParts); 
    $select->where(new Zend_Db_Expr($myWhere)); 
    $select->where('disabled = ?', '0'); 

    // print query 
    echo $select->assemble(); 
    die(); 
+0

是。取得了理想的结果 – Student 2011-05-20 12:00:06