Example #1
0
 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}";
 }
Example #2
0
 /**
  * 建立 SELECT 語法
  *
  * @param array $cols
  * @return \Goez\Db\Select
  */
 public function select($cols = null)
 {
     $select = new Db\Select($this);
     return $select->colnum($cols);
 }