2009-08-16 41 views
1
public function getWorksheetData($id) { 

/** create the following query using select object: 

    SELECT wc.label, wd.notes FROM worksheet_data wd 
    LEFT JOIN worksheet_columns wc ON wd.column_id = wc.id; 

*/ 
    $id = (int) $id; 

    $select = $this->_db->select() 
    ->from(array('wd'=>'worksheet_data'), 
      array('wc.label','wd.notes')) 
    ->join(array('wc'=>'worksheet_columns','wd.column_id = wc.id')) 
    ->where("wd.id = :worksheet_id"); 

    $results = $this->_db->fetchAll($select, array('worksheet_id' => $id),Zend_Db::FETCH_ASSOC); 


    return array('results'=>$results); 

}Zend_DB_Select:为什么所有字段都返回?

为什么这个查询变为:

选择wclabelwd。 。noteswc * FROM worksheet_data AS wd INNER JOIN worksheet_columns AS wc WHERE(wd.id =:worksheet_id)

,并返回厕所。*?

回答

3

你需要把一个空数组作为第三个参数的连接方法,还连接条件不应该是第一个参数的阵列的一部分,但作为第二个参数,而不是(你会发现,有不参加条件在您的查询)。加入至少需要前两个参数,这是该方法的签名:

加入(表,加盟,[列])

应用,为您的加入方法:

->join(array('wc'=>'worksheet_columns'),'wd.column_id = wc.id', array()) 

这样:

$select = $this->_db->select() 
     ->from(array('wd'=>'worksheet_data'), 
         array('wc.label','wd.notes')) 
     ->join(array('wc'=>'worksheet_columns'),'wd.column_id = wc.id', array()) 
     ->where("wd.id = :worksheet_id"); 

给出了输出:

SELECT `wc`.`label`, `wd`.`notes` FROM `worksheet_data` AS `wd` INNER JOIN `worksheet_columns` AS `wc` ON wd.column_id = wc.id WHERE (wd.id = :worksheet_id) 

manual说:

若要从表中选择任何列,使用 空数组 列的列表。

+0

感谢。该手册还称joinInner(表,连接,[列])方法。方括号是不是表示可选? – codecowboy 2009-08-16 08:20:15

+1

@codecowboy - 是的是的话,我已经添加了方法签名我的答案。 – karim79 2009-08-16 08:21:56