Я использую этот код ниже. Как вы можете видеть, объекты $ 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");
Но что случилось, когда я использовал это, где изменение:
$oSelectNV->where("o.np = 'NV'")
->group('u.id')
->order('kz DESC');
Условие также применяется к объекту $ oSelectNP (я вижу, что в SQL, отправленном в БД). Я не понимаю логики этого. Я полагаю, что при инициализации $ oSelectE = $ oSelectNV = $ oSelectPV = копируется только значение этих переменных, поэтому, когда я использую функцию WHERE, ее следует применять только к $ oSelectNV и NOT to oSelectPV. Это какая-то ошибка ZEND, или это имеет логическое объяснение?