2009-08-16 46 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