在用phpcms做二次开发的时候就难免不用到
多表查询。phpcms提供了一个很好标签给我们合用,那就是get标签,具体用法如下。
{pc:get sql="SELECT title,url FROM v9_news where catid=9 and status=99 order by updatetime desc" start="0" num="4" return="v"}
get标签可以直接写sql
查询语句,这个可以根据需求去自由发挥。start为开始数据,num是返回几条数据。return 为返回的数据。
但如果要在程序中实现多表查询怎么办,那就只接可以用$this->db->query($sql)来取得相应的数据。
要是碰到多表的分页查询用query就满足不了相应的功能了,我的做法是改libs/classes/model.class.php,重写listinfo()方法。
/**
* 查询多条数据并分页
* @param $where
* @param $order
* @param $page
* @param $pagesize
* @return unknown_type
*/
final public function mylistinfo($table='',$where = '', $order = '', $page = 1, $pagesize = 20, $key='', $setpages = 10,$urlrule = '',$array = array()) {
$where = to_sqls($where);
$this->number = $this->count($where);
$page = max(intval($page), 1);
$offset = $pagesize*($page-1);
$this->pages = pages($this->number, $page, $pagesize, $urlrule, $array, $setpages);
$array = array();
if ($this->number > 0) {
return $this->myselect($table,$where, '*', "$offset, $pagesize", $order, '', $key);
} else {
return array();
}
}
/**
* 执行sql查询
* @param $where 查询条件[例`name`='$name']
* @param $data 需要查询的字段值[例`name`,`gender`,`birthday`]
* @param $limit 返回结果范围[例:10或10,10 默认为空]
* @param $order 排序方式 [默认按数据库默认方式排序]
* @param $group 分组方式 [默认为空]
* @param $key 返回数组按键名排序
* @return array 查询结果集数组
*/
final public function myselect($table='',$where = '', $data = '*', $limit = '', $order = '', $group = '', $key='') {
if (is_array($where)) $where = $this->sqls($where);
return $this->db->select($data, $table, $where, $limit, $order, $group, $key);
}
如上所示,与系统自带的就是多传了个$table,这样我们可以把要查询的多表写成view再传进来就可以实现相应的功能了