/**
  * 取得数据集合
  * 
  * @param string $start 起始时间
  * @param string $end 结束时间
  * @param string $unit 时间单位
  * @return array
  */
 public function collect($start, $end, $unit)
 {
     if (!$this->_checkDatetimeUnit($unit)) {
         throw new ZtChart_Model_Assemble_Backend_Exception('The datetime unit is illegal: ' . $unit);
     }
     $this->_selectDatetimeTable($start, $end, $unit);
     $pos = ZtChart_Model_Assemble_Datetime::getDatetimePos($unit);
     $select = $this->select(ZtChart_Model_Assemble_Datetime::normalizeDatetime($start), ZtChart_Model_Assemble_Datetime::normalizeDatetime($end), $pos);
     $rowset = array();
     foreach ($this->_selectGameTypes($select, $this->_group)->query()->fetchAll() as $row) {
         $label = substr($row[self::ROW_LABEL], 0, $pos);
         if (!array_key_exists($label, $rowset)) {
             $rowset[$label] = array();
         }
         unset($row[self::ROW_LABEL]);
         $tmp =& $rowset[$label];
         if (!empty($this->_merge)) {
             foreach ($this->_merge as $merge) {
                 $v = $row[$merge];
                 if (!array_key_exists($v, $tmp)) {
                     $tmp[$v] = array();
                     unset($row[$merge]);
                 }
                 $tmp =& $tmp[$v];
             }
         }
         foreach ($row as $key => $value) {
             if (!array_key_exists($key, $tmp)) {
                 $tmp[$key] = 0;
             }
             $tmp[$key] += $value;
         }
     }
     return $rowset;
 }