2009-08-16 13 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:なぜすべてのフィールドが返されますか?

なぜこのクエリはなるん:

wcを選択します。 label,wd。 。noteswc * wd AS worksheet_dataから内はwc AS worksheet_columns登録しよう(wd.id =:worksheet_id)

をし、トイレを返しますか*。?

答えて

3

joinメソッドの3番目の引数として空の配列を配置する必要があります。また、結合条件は最初の引数の配列の一部ではなく、2番目の引数として使用します(joinあなたの質問の条件)。少なくとも最初の二つの引数のニーズに参加し、これは、メソッドのシグネチャである:あなたの参加方法にあることを適用

([列]、参加、テーブル)に参加

->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) 

氏は述べています:

は、テーブルからカラムを取得しない 列のリストについては、 空の配列を使用します。

+0

ありがとうございました。このマニュアルでは、joinInner(table、join、[columns])メソッドについても説明しています。角括弧はオプションであることを意味しませんか? – codecowboy

+1

@codecowboy - はい、私は答えにメソッドの署名を追加しました。 – karim79

関連する問題