protected function _DB_SELECT($elem) { $db = new Db\Select($this->getStruct('DB')); $db->distinct = $elem['DISTINCT']; if (isset($elem['DB:FIELDS'])) { $child = $elem['DB:FIELDS'][0]; isset($child[SIGN_MAP]) and $child = $this->map($child); $db->fields = $this->runDbData($child, 'VAR'); } if (isset($elem['DB:TABLE'])) { $child = $elem['DB:TABLE'][0]; isset($child[SIGN_MAP]) and $child = $this->map($child); $db->table = [$child[SIGN_CDATA], $child['ALIAS']]; } isset($elem['DB:JOIN']) and $db->join = $this->runStruct('DB_JOIN', $elem['DB:JOIN'][0][SIGN_CHILD]); $db->where = $this->runDbCondition($elem); if (isset($elem['DB:GROUPBY'])) { $child = $elem['DB:GROUPBY'][0]; isset($child[SIGN_MAP]) and $child = $this->map($child); if (!isset($child[SIGN_CHILD]) || !($db->groupby = $this->runStruct('DB_GROUPBY', $child[SIGN_CHILD]))) { $db->groupby = $this->getVarArrayExport($child['VAR']); } } isset($elem['DB:HAVING']) and $db->having = $this->runDbCondition($elem['DB:HAVING'][0]); if (isset($elem['DB:ORDERBY'])) { $child = $elem['DB:ORDERBY'][0]; isset($child[SIGN_MAP]) and $child = $this->map($child); if (!isset($child[SIGN_CHILD]) || !($db->orderby = $this->runStruct('DB_ORDERBY', $child[SIGN_CHILD]))) { foreach ($this->getVarArray($child['VAR']) as $name => $type) { $db->orderby[$name] = strcasecmp($type, 'desc') === 0; } } } $db->limit = $elem['LIMIT']; $db->offset = $elem['OFFSET']; $var = $elem['VAR_COUNT'] and $this->setVar($var, $db->count()); if ($var = $elem['VAR_RESULT']) { switch ($type = $elem['TYPE']) { case 'list': $data = $db->resultList(); break; case 'av': $data = $db->resultAV(); break; case 'single': $data = $db->result(); break; case 'self': $data = $db->result(true); break; default: // assoc, num $data = $db->resultAll($type === 'assoc'); foreach ($data as &$item) { $item = new iXmlArray($item); } } $this->setVarArray($var, $data); } return "{$db}"; }
/** * 建立 SELECT 語法 * * @param array $cols * @return \Goez\Db\Select */ public function select($cols = null) { $select = new Db\Select($this); return $select->colnum($cols); }