Php Zend Select-使用具有多个变体的同一选择
我正在使用下面的代码。如您所见,$oSelectE、$oSelectNV和$oSelectPV对象具有相同的基本select查询,直到我添加where、group和order变量Php Zend Select-使用具有多个变体的同一选择,php,zend-framework,zend-db,Php,Zend Framework,Zend Db,我正在使用下面的代码。如您所见,$oSelectE、$oSelectNV和$oSelectPV对象具有相同的基本select查询,直到我添加where、group和order变量 $oSelectE = $this->getAdapter()->select()->distinct() ->from(array('o' => 'odpocty'), array('u.id', 'kz' => 'SUM(o.kz)', '
$oSelectE = $this->getAdapter()->select()->distinct()
->from(array('o' => 'odpocty'), array('u.id', 'kz' => 'SUM(o.kz)', 'obrat' => 'SUM(o.vyplata)'))
->join(array('u' => 'uzivatele'), 'u.id = o.zadalid', array('u.jmeno', 'u.prijmeni'))
->where("o.orgid=" . intval($orgid))->where("o.datum>='" . $od . "'")->where("o.datum<='" . $do . "'")->where("o.kz<>0");
$oSelectNV = $this->getAdapter()->select()->distinct()
->from(array('o' => 'odpocty'), array('u.id', 'kz' => 'SUM(o.kz)', 'obrat' => 'SUM(o.vyplata)'))
->join(array('u' => 'uzivatele'), 'u.id = o.zadalid', array('u.jmeno', 'u.prijmeni'))
->where("o.orgid=" . intval($orgid))->where("o.datum>='" . $od . "'")->where("o.datum<='" . $do . "'")->where("o.kz<>0");
$oSelectPV = $this->getAdapter()->select()->distinct()
->from(array('o' => 'odpocty'), array('u.id', 'kz' => 'SUM(o.kz)', 'obrat' => 'SUM(o.vyplata)'))
->join(array('u' => 'uzivatele'), 'u.id = o.zadalid', array('u.jmeno', 'u.prijmeni'))
->where("o.orgid=" . intval($orgid))->where("o.datum>='" . $od . "'")->where("o.datum<='" . $do . "'")->where("o.kz<>0");
$oSelectE->group('u.id')
->order('kz DESC');
$oSelectNV->where("o.np = 'NV'")
->group('u.id')
->order('kz DESC');
$oSelectPV->where("o.np = 'PV'")
->group('u.id')
->order('kz DESC');
该条件也应用于对象$oSelectNP(我可以在发送到DB的SQL中看到)。我不明白其中的逻辑。我假设在启动$oSelectE=$oSelectNV=$oSelectPV=时,只复制这些变量的值,因此当我使用WHERE函数时,它应该只应用于$oSelectNV,而不应用于oSelectPV。这是某种ZEND bug,还是有逻辑上的解释?可能是克隆对象的唯一引用。您可以尝试使用“克隆”关键字克隆整个对象;比如$oSelectE=clone$oSelectPV
$oSelectE = $oSelectNV = $oSelectPV = $this->getAdapter()->select()->distinct()
->from(array('o' => 'odpocty'), array('u.id', 'kz' => 'SUM(o.kz)', 'obrat' => 'SUM(o.vyplata)'))
->join(array('u' => 'uzivatele'), 'u.id = o.zadalid', array('u.jmeno', 'u.prijmeni'))
->where("o.orgid=" . intval($orgid))->where("o.datum>='" . $od . "'")->where("o.datum<='" . $do . "'")->where("o.kz<>0");
$oSelectNV->where("o.np = 'NV'")
->group('u.id')
->order('kz DESC');