Sql Zend框架中的内部连接
我想在两个表之间进行内部联接 访问表已关闭Sql Zend框架中的内部连接,sql,zend-framework,inner-join,Sql,Zend Framework,Inner Join,我想在两个表之间进行内部联接 访问表已关闭 访问id 目标 报告表已被删除 代表id 访问id 每次访问都有许多报告,我想选择具有指定访问目标的所有报告 我这样做,但不起作用 $db = Zend_Db_Table::getDefaultAdapter(); $select = $db->select(); $rows = $select->from('visits_tb', array('target', 'visit_id'))
- 访问id
- 目标
- 代表id
- 访问id
$db = Zend_Db_Table::getDefaultAdapter();
$select = $db->select();
$rows = $select->from('visits_tb', array('target', 'visit_id'))
->joinInner('report_tb', 'visits_tb.visit_id= report_tb.visit_id', array('visit_id', 'rep_id'))
->where("visits_tb.visit_id=$id");
你可以尝试以下方法;如果使用表别名,可能会更清楚一些:
$db = Zend_Db_Table::getDefaultAdapter();
$select = $db->select()
->from(array('v' => 'visits_tb'), array('target', 'visit_id', 'rep_id'))
->joinInner(array('r' => 'report_tb'), 'v.visit_id = r.visit_id')
->where('v.visit_id = ?', $id);
$query = $select->query();
默认情况下,ZF使用内部联接,因此joinInner==join。因为FK的名称=PK,所以您可以使用joinUsing
$rows = $db->fetchAll($select);
我认为更好的解决办法是在这种情况下使用Zend的关系 使用此配置,您应该能够获取带有报告的依赖行集
$visitTable = new Visit();
//fetch visit with id 13
$visitRow = $visitTable->find(13)->current();
$reportRowset = $visitRow->findDependentRowset('Report');
什么是有益的,您可以立即继续并处理结果
//for example
foreach ($reportRowset as $report) {
$report->someField = 'newValue';
$report->save();
}
如果你把它转过来会怎么样
$rows = $select->from(array('r'=>'report_tb'), array('rep_id', 'visit_id'))
->join(array('v'=>'visits_tb'), 'r.visit_id= v.visit_id', array('target'))
->where("r.visit_id=$id");
没有测试过代码,但在我看来更正确,如果您想以指定的目标输出报表表中的所有行。它怎么不起作用<代码>echo$select代码>是否显示内部联接?即使在sql server中执行sql,它也会返回empy结果集!!我不明白加入这里的过程!如果我有引用密钥的条件,我如何工作。。这样做一点也不容易:(我的解决方案中没有连接。您使用两个独立的行对象-$reportRow和$visitRow。您可以操作它们并保存,而无需额外工作。使用连接时,您需要先处理结果,然后才能使用它们。
//for example
foreach ($reportRowset as $report) {
$report->someField = 'newValue';
$report->save();
}
$rows = $select->from(array('r'=>'report_tb'), array('rep_id', 'visit_id'))
->join(array('v'=>'visits_tb'), 'r.visit_id= v.visit_id', array('target'))
->where("r.visit_id=$id");