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);
}
为什么此查询成为:
SELECT wc
。label
,wd
。notes
,wc
。* FROM worksheet_data
AS wd
INNER JOIN { {1}} AS worksheet_columns
WHERE(wd.id =:worksheet_id)
并返回wc。*?
答案 0 :(得分:3)
你需要将一个空数组作为join方法的第三个参数,连接条件也不应该是第一个参数的数组的一部分,而是作为第二个参数(你会注意到没有连接条件)在你的查询中)。加入需要至少前两个参数,这是方法签名:
加入(table,join,[columns])
将其应用于您的加入方法:
->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说:
要从表中选择无列,请使用 列表的空数组 列。