1 /**
2 * 给Zend_Db_Select增加where条件
3 *
4 * @param Zend_Db_Select $select
5 * @param array $where
6 * @return Zend_Db_Select
7 */
8 protected function addWhereToSelect($select, $where) {
9 foreach ($where as $k=>$v) {
10 if ($v === null) {
11 $select->where($k);
12 } else {
13 $select->where($k, $v);
14 }
15 }
16 if ($this->_status_fieldname) {
17 $select->where($this->_status_fieldname . ' < ?', Mana_Const::STATUS_DEL);
18 }
19 return $select;
20 }
1 /**
2 * 给Zend_Db_Select增加where条件
3 *
4 * @param Zend_Db_Select $select
5 * @param array $where
6 * @return Zend_Db_Select
7 */
8 protected function addWhereToSelect($select, $where) {
9 foreach ($where as $k=>$v) {
10 if ($v === null) {
11 $select->where($k);
12 } else {
13 $select->where($k, $v);
14 }
15 }
16 if ($this->_status_fieldname) {
17 $select->where($this->_status_fieldname . ' < ?', Mana_Const::STATUS_DEL);
18 }
19 return $select;
20 }
1 /**
2 * Update delete等增加where条件
3 *
4 * @param array $where
5 * @return string
6 */
7 protected function addWhereToUdl($where) {
8 $sw = '';
9 foreach ($where as $quote=>$val) {
10 if ($val === null) {
11 $sw .= ' ' . $quote . ' AND';
12 } else {
13 $sw .= ' ' .$this->_db->quoteInto($quote, $val) . ' AND';
14 }
15 }
16 if ($sw) {
17 $sw = trim($sw, 'AND');
18 }
19 return $sw;
20 }
1 /**
2 *
3 * 获得满足条件的第一行数据
4 * @param array $mixWhere
5 * 设置连表情况
6 *
7 * @param array $options like
8 * array(
9 * tables=>array('key'=>array('tablename'=>'', 'on'=>'', 'fields'=>array())),
10 * 'where'=>array(
11 * 'tbl.field = ?'=>val,
12 * )
13 * )
14 */
15 public function getRow($mixWhere = array(), $options = array()) {
16 $objSelect = $this->_db->select();
17 $objSelect->from(array('s'=>$this->getTableName()),'*');
18 $objSelect = $this->addWhereToSelect($objSelect, $mixWhere);
19 $objSelect = $this->addOptionsToSelect($objSelect, $options);
20 $this->_logger->log(__CLASS__ . '.'.__FUNCTION__ . '.'.$objSelect->__toString(), Zend_Log::INFO);
21 $objRow = $this->_db->fetchRow($objSelect,null,Zend_Db::FETCH_OBJ);
22 return $objRow;
23 }
1 /**
2 * 获得满足条件记录数量
3 *
4 * @param array $mixWhere
5 * 设置连表情况
6 *
7 * @param array $options like
8 * array(
9 * tables=>array('key'=>array('tablename'=>'', 'on'=>'', 'fields'=>array())),
10 * 'where'=>array(
11 * 'tbl.field = ?'=>val,
12 * )
13 * )
14 * @return int
15 */
16 public function getCount($mixWhere = array(), $options = array()) {
17 $objSelect = $this->_db->select();
18 $objSelect->from(array('s'=>$this->getTableName()),array('COUNT(1)'));
19 $objSelect = $this->addWhereToSelect($objSelect, $mixWhere);
20 $objSelect = $this->addOptionsToSelect($objSelect, $options);
21 $this->_logger->log(__CLASS__ . '.'.__FUNCTION__ . '.'.$objSelect->__toString(), Zend_Log::INFO);
22 $num = $this->_db->fetchOne($objSelect,null,Zend_Db::FETCH_OBJ);
23 return $num;
24 }
25
1 /**
2 *
3 * Enter description here ...
4 * @param Zend_Db_Select $select
5 * @param unknown_type $options
6 * 设置连表情况
7 *
8 * @param array $options like
9 * array(
10 * tables=>array('key'=>array('tablename'=>'', 'on'=>'', 'fields'=>array(), 'jointype'=>'join|joinleft|joinright')),
11 * 'where'=>array(
12 * 'tbl.field = ?'=>val,
13 * )
14 * )
15 * @return Zend_Db_Select
16 */
17 protected function addOptionsToSelect($select, $options) {
18 if (empty($options)) {
19 return $select;
20 }
21 $tables = $options['tables'];
22 foreach ($tables as $key=>$tblJoinInfo) {
23 $tName = '';
24 if (is_numeric($key)) {
25 $tName = $tblJoinInfo['tablename'];
26 } else {
27 $tName = array($key=>$tblJoinInfo['tablename']);
28 }
29 if ($tblJoinInfo['jointype'] == '' || $tblJoinInfo['jointype'] == 'join') {
30 $select->join($tName, $tblJoinInfo['on'], $tblJoinInfo['fields']);
31 } elseif ($tblJoinInfo['jointype'] == 'joinleft') {
32 $select->joinLeft($tName, $tblJoinInfo['on'], $tblJoinInfo['fields']);
33 } elseif ($tblJoinInfo['jointype'] == 'joinright') {
34 $select->joinRight($tName, $tblJoinInfo['on'], $tblJoinInfo['fields']);
35 } else {
36 throw new Exception('查询错误', 90001);
37 }
38 }
39 $wheres = $options['where'];
40 if ($wheres) {
41 $select = $this->addWhereToSelect($select, $wheres);
42 }
43 return $select;
44 }
1 /**
2 *
3 * 获得满足条件的所有行数据
4 * @param array $mixWhere
5 * 设置连表情况
6 *
7 * @param array $options like
8 * array(
9 * tables=>array('key'=>array('tablename'=>'', 'on'=>'', 'fields'=>array())),
10 * 'where'=>array(
11 * 'tbl.field = ?'=>val,
12 * )
13 * )
14 */
15 public function getRows($mixWhere = array(), $options = array()) {
16 $objSelect = $this->_db->select();
17 $objSelect->from(array('s'=>$this->getTableName()),'*');
18 $objSelect = $this->addWhereToSelect($objSelect, $mixWhere);
19 $objSelect = $this->addOptionsToSelect($objSelect, $options);
20 $this->_logger->log(__CLASS__ . '.'.__FUNCTION__ . '.'.$objSelect->__toString(), Zend_Log::INFO);
21 $objRows = $this->_db->fetchAll($objSelect,null,Zend_Db::FETCH_OBJ);
22 return $objRows;
23 }