Zend Select - 使用具有多个变体的相同 select
Zend Select - using the same select with multiple variations
我正在使用下面的代码。如您所见,对象 $oSelectE、$oSelectNV 和 $oSelectPV 具有相同的基本 select 查询,直到我添加 where、group 和 order 变体。
$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');
所以,我尝试的是只使用一次 select,就像这样(在添加 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 错误,还是有合理的解释?
可能只是对对象的引用被克隆。您可以尝试使用 "clone" 关键字来克隆整个对象;喜欢 $oSelectE = 克隆 $oSelectPV .
我正在使用下面的代码。如您所见,对象 $oSelectE、$oSelectNV 和 $oSelectPV 具有相同的基本 select 查询,直到我添加 where、group 和 order 变体。
$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');
所以,我尝试的是只使用一次 select,就像这样(在添加 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 错误,还是有合理的解释?
可能只是对对象的引用被克隆。您可以尝试使用 "clone" 关键字来克隆整个对象;喜欢 $oSelectE = 克隆 $oSelectPV .