2017-01-06 16 views
0

我在下面使用此代码。如您所见,对象$ oSelectE,$ oSelectNV和$ oSelectPV具有相同的基本选择查询,直到我添加where,group和order变体。Zend Select - 使用与多个变体相同的选择

$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'); 

所以,我试过了,是使用只选择一次,像这样(添加WHERE变化前):

$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"); 

但实际情况是,当我用这个WHERE变化:

$oSelectNV->where("o.np = 'NV'") 
     ->group('u.id') 
     ->order('kz DESC'); 

该条件也适用于对象$ oSelectNP(我可以看到在发送到数据库的SQL中)。我不明白这一点的逻辑。我想当启动$ oSelectE = $ oSelectNV = $ oSelectPV =时,只有这些变量的值被复制,所以当我使用WHERE函数时,它应该只应用于$ oSelectNV而不应用于oSelectPV。这是一些ZEND错误,还是这有一个合理的解释?

回答

0

可能只是对被克隆对象的引用。您可以尝试使用“克隆”关键字克隆整个对象;像$ oSelectE = clone $ oSelectPV一样。

相关问题