私はこのコードを以下に使用しています。ご覧のように、オブジェクト$ oSelectE、$ oSelectNV、$ oSelectPVは、場所、グループ、および注文のバリエーションを追加するまで、同じ基本選択クエリを持ちます。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バリエーションを追加する前に)一度だけ、このような選択を使用した:私はこの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にも適用されています(DBに送信されたSQLにその状態が表示されています)。私はその論理を理解していません。 $ oSelectE = $ oSelectNV = $ oSelectPV =を起動すると、これらの変数の値だけがコピーされるので、WHERE関数を使用するときは、$ oSelectNVにのみ適用し、oSelectPVには適用しないでください。それはいくつかのZENDのバグですか?これは論理的な説明ですか?