2017-01-06 3 views
0

Ich verwende diesen Code unten. Wie Sie sehen können, haben die Objekte $ oSelectE, $ oSelectNV und $ oSelectPV die selbe Basisauswahl-Abfrage, bis ich die Variationen für Wo, Gruppe und Reihenfolge hinzufüge.Zend Select - mit der gleichen Auswahl mit mehreren Variationen

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

Also, was ich versuchte, benutzen Sie war es, die nur einmal wählen, wie diese (vor der WHERE Variationen Zugabe):

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

Aber was passiert war, als ich diese WHERE Variation verwendet:

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

Die Bedingung wurde auch auf das Objekt $ oSelectNP angewendet (ich kann das in der an die DB gesendeten SQL sehen). Ich verstehe die Logik nicht. Ich vermute, wenn $ oSelectE = $ oSelectNV = $ oSelectPV = initialisiert wird, wird nur der Wert dieser Variablen kopiert. Wenn ich also die WHERE-Funktion verwende, sollte sie nur auf $ oSelectNV und NICHT auf oSelectPV angewendet werden. Ist das ein ZEND Bug, oder hat das eine logische Erklärung?

Antwort

0

kann nur Bezug auf Objekt geklont werden. Sie können versuchen, das Schlüsselwort "clone" zu verwenden, um das ganze Objekt zu klonen; Wie $ oSelectE = klon $ oSelectPV.

Verwandte Themen