我正在使用zend框架和我的sql来显示一些数据。
查询如下:
$table = new Timesheets_Table_Tasks();
$select = $table->select(true)
->setIntegrityCheck(false)
->join('timesheets_projects', 'timesheets_projects.ID=timesheets_tasks.ProjectID', array())
->join('timesheets_clients', 'timesheets_clients.ID=timesheets_projects.ClientID', array())
return $this->filterSelect($select);
函数filterSelect如下所示:
protected function filterSelect($select)
{
$select->where("timesheets_tasks.UserID=?", Zend_Auth::getInstance()->getIdentity()->id);
foreach($this->_filters as $filter => $value)
{
if(($value == "" || $value == "none") && $filter != "status")
{
continue;
}
switch($filter)
{
case 'q':
$select->where($this->_db->quoteInto('timesheets_tasks.Comment LIKE ?', '%' . $value . '%'));
break;
case 'after':
$select->where($this->_db->quoteInto('timesheets_tasks.Date >= UNIX_TIMESTAMP(STR_TO_DATE(?, "%d/%m/%Y"))', $value));
break;
case 'before':
$select->where($this->_db->quoteInto('timesheets_tasks.Date <= UNIX_TIMESTAMP(STR_TO_DATE(?, "%d/%m/%Y"))', $value));
break;
case 'client':
$select->where($this->_db->quoteInto('timesheets_clients.ID = ?', $value));
break;
case 'project':
$select->where($this->_db->quoteInto('timesheets_tasks.ProjectID = ?', $value));
break;
case 'status':
$select->where($this->_db->quoteInto('timesheets_tasks.Status = ?', $value));
break;
case 'jobtype':
$select->where($this->_db->quoteInto('timesheets_tasks.TypeID = ?', $value));
break;
}
}
return $select;
}
我显示了查询,它显示为:
选择timesheets_tasks
.*FROM timesheets_tasks
INNER在时间表_项目上加入timesheets_projects
。ID=时间表_任务。项目ID INNER加入时间表_客户端上的timesheets_clients
。ID=日程表_项目。客户端ID WHERE(时间表_任务.UserID='33')AND(时间表_工作任务。状态=0)ORDER BY date
DESC
但是查询并没有给出实际的数据。
我认为这是联接表的问题。当我从查询中删除行"->join('timesheets_clients','timesheet_clients.ID=timesheets_projects.ClientID',array())"时,输出显示正确。但我也必须从另外两个表中选择一些字段。所以我需要一个联合财产。我可以使用任何其他联接来从其他两个表中获取列值并获得正确的输出吗?
我是新加入的。任何帮助都将不胜感激!
可以帮助您解决
$table = new Timesheets_Table_Tasks();
$select = $table->select(true)
->setIntegrityCheck(false)
->joinLeft('timesheets_projects', 'timesheets_projects.ID=timesheets_tasks.ProjectID', array())
->joinLeft('timesheets_clients', 'timesheets_clients.ID=timesheets_projects.ClientID', array())
return $this->filterSelect($select)
此外,请与echo
核对您的select
声明并加入
希望这对你有用。