Merge pull request #181 from loftor-git/master

增加HAVING语句方法
This commit is contained in:
joyqi 2014-02-12 17:58:34 +08:00
commit a2090a3250
7 changed files with 29 additions and 6 deletions

View File

@ -141,7 +141,7 @@ class Typecho_Db_Adapter_Mysql implements Typecho_Db_Adapter
$sql['offset'] = (0 == strlen($sql['offset'])) ? NULL : ' OFFSET ' . $sql['offset'];
return 'SELECT ' . $sql['fields'] . ' FROM ' . $sql['table'] .
$sql['where'] . $sql['group'] . $sql['order'] . $sql['limit'] . $sql['offset'];
$sql['where'] . $sql['group'] . $sql['having'] . $sql['order'] . $sql['limit'] . $sql['offset'];
}
/**

View File

@ -84,6 +84,6 @@ class Typecho_Db_Adapter_Pdo_Mysql extends Typecho_Db_Adapter_Pdo
$sql['offset'] = (0 == strlen($sql['offset'])) ? NULL : ' OFFSET ' . $sql['offset'];
return 'SELECT ' . $sql['fields'] . ' FROM ' . $sql['table'] .
$sql['where'] . $sql['group'] . $sql['order'] . $sql['limit'] . $sql['offset'];
$sql['where'] . $sql['group'] . $sql['having'] . $sql['order'] . $sql['limit'] . $sql['offset'];
}
}

View File

@ -71,7 +71,7 @@ class Typecho_Db_Adapter_Pdo_Pgsql extends Typecho_Db_Adapter_Pdo
$sql['offset'] = (0 == strlen($sql['offset'])) ? NULL : ' OFFSET ' . $sql['offset'];
return 'SELECT ' . $sql['fields'] . ' FROM ' . $sql['table'] .
$sql['where'] . $sql['group'] . $sql['order'] . $sql['limit'] . $sql['offset'];
$sql['where'] . $sql['group'] . $sql['having'] . $sql['order'] . $sql['limit'] . $sql['offset'];
}
/**

View File

@ -70,6 +70,6 @@ class Typecho_Db_Adapter_Pdo_SQLite extends Typecho_Db_Adapter_Pdo
$sql['offset'] = (0 == strlen($sql['offset'])) ? NULL : ' OFFSET ' . $sql['offset'];
return 'SELECT ' . $sql['fields'] . ' FROM ' . $sql['table'] .
$sql['where'] . $sql['group'] . $sql['order'] . $sql['limit'] . $sql['offset'];
$sql['where'] . $sql['group'] . $sql['having'] . $sql['order'] . $sql['limit'] . $sql['offset'];
}
}

View File

@ -149,7 +149,7 @@ class Typecho_Db_Adapter_Pgsql implements Typecho_Db_Adapter
$sql['offset'] = (0 == strlen($sql['offset'])) ? NULL : ' OFFSET ' . $sql['offset'];
return 'SELECT ' . $sql['fields'] . ' FROM ' . $sql['table'] .
$sql['where'] . $sql['group'] . $sql['order'] . $sql['limit'] . $sql['offset'];
$sql['where'] . $sql['group'] . $sql['having'] . $sql['order'] . $sql['limit'] . $sql['offset'];
}
/**

View File

@ -169,7 +169,7 @@ class Typecho_Db_Adapter_SQLite implements Typecho_Db_Adapter
$sql['offset'] = (0 == strlen($sql['offset'])) ? NULL : ' OFFSET ' . $sql['offset'];
return 'SELECT ' . $sql['fields'] . ' FROM ' . $sql['table'] .
$sql['where'] . $sql['group'] . $sql['order'] . $sql['limit'] . $sql['offset'];
$sql['where'] . $sql['group'] . $sql['having'] . $sql['order'] . $sql['limit'] . $sql['offset'];
}
/**

View File

@ -70,6 +70,7 @@ class Typecho_Db_Query
'offset' => NULL,
'order' => NULL,
'group' => NULL,
'having' => NULL,
'rows' => array(),
);
}
@ -336,6 +337,28 @@ class Typecho_Db_Query
return $this;
}
/**
* HAVING (HAVING)
*
* @return Typecho_Db_Query
*/
public function having()
{
$condition = func_get_arg(0);
$condition = str_replace('?', "%s", $this->filterColumn($condition));
$operator = empty($this->_sqlPreBuild['having']) ? ' HAVING ' : ' AND';
if (func_num_args() <= 1) {
$this->_sqlPreBuild['having'] .= $operator . ' (' . $condition . ')';
} else {
$args = func_get_args();
array_shift($args);
$this->_sqlPreBuild['having'] .= $operator . ' (' . vsprintf($condition, array_map(array($this->_adapter, 'quoteValue'), $args)) . ')';
}
return $this;
}
/**
* 选择查询字段
*