phpcms 多表多字段自定义sql查询并分页功能实现

关于phpcms 多表多字段自定义sql查询并分页功能,网上的教程比较多。
近期开发一个金属材料查询系统,需要在多个表单内查询keyword,还需要在用户表关联查询信息创建人的用户名,我实际应用了一下,测试成功。

我的代码整理如下:

1.修改phpcms\model\get_model.class.php,插入函数:public function multi_listinfo

 //自定义分页查询{支持多表}
    public function multi_listinfo($where = '', $page = 1, $pagesize = 12, $key='', $setpages = 10,$urlrule = '',$array = array()) {
            $sql = preg_replace('/select([^from].*)from/i', "SELECT COUNT(*) as count FROM ", $where);
           // echo $sql;
            $this->sql_query($sql);
            $c = $this->fetch_next();
            $this->number = $c['count'];
            $page = max(intval($page), 1);
            $offset = $pagesize*($page-1);
            $this->pages = pages($this->number, $page, $pagesize, $urlrule, $array, $setpages); //分页

            $r = $this->sql_query($where.' LIMIT '.$offset.','.$pagesize);
            while(($s = $this->fetch_next()) != false){
                $data[] = $s;
            }
            return $data;
    }

2.需要方法里面的代码,包含了sql的拼接,以及查询,分页实现。

			//这里采用下面的多表联合查询
			$where = " WHERE m.name like '%".$keyword."%'" ;
			$where .= " OR trademark.name like '%".$keyword."%'" ;
			
		    //要查询用户名,这里用到了left join,从v9_mamber里面查询满足条件( m.createuser = u.userid)的用户名
			$sql = "SELECT m.*,u.username FROM v9_material as m LEFT JOIN v9_material_trademark as trademark ON m.id = trademark.mid ";//
			$sql .= " LEFT JOIN v9_member as u ON m.createuser = u.userid";//
			$order = " order by m.id desc";
			$sql= $sql.$where.$order; 

			//引入第一步修改的get_model.class.php文件
			$get_db = pc_base::load_model('get_model');//在get_model.class里面定义的multi_listinfo方法
			
			$page = intval($_GET['page'])?intval($_GET['page']) :'1';
			$infos = $get_db->multi_listinfo($sql,$page,$pages = '5'); //返回查询结果
			$pages = $get_db->pages;//返回分页

这里查询了3张表。主表为v9_material,LEFT JOIN了v9_material_trademark和v9_member两张表。

3.前端模板调用

{loop $infos $r}
<li>
    <div class="list">
    标题:{$r['name']},创建人:{$r['username']}
    </div>
</li>
{/loop}
 
    <!--分页-->
<div class="pages">{$pages}</div>

结束!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值