1.当统计一个有重复的字段可以用这个方法(统计数量时去重id)$count=$model->where($map)->count('distinct(id)');2.利用distinct方法去重$data=$test_data->Distinct(true)->field('descriprion')->order('descriptiondesc')->select();3.利用group方法去重$data=$test_data->group('description')->order('descriptiondesc')->select();对于两种去重方式: 利用distinct去重、简单易用,但只能对于单一字段去重,并且最终的结果也仅为去重的字段,实际应用价值不是特别大。利用group去重,最终的显示结果为所有字段,且对单一字段进行了去重操作,效果不错,但最终显示结果除去去重字段外,按照第一个字段进行排序,可能还需要处理。
获取sql语句getLastSql$res=Db::table('staff')->field('id,salary')->where('id','>',1)->group('salary')->having('salary>5000')->select();$sql=Db::table('staff')->getLastSql();halt($sql);select(false)$res=Db::table('staff')->field('id,salary')->where('id','>',1)->group('salary')->having('salary>5000')->select(false);halt($res);fetchSql$res=Db::table('staff')->field('id,salary')->where('id','>',1)->group('salary')->having('salary>5000')->fetchSql()->select();halt($res);buildSql$res=Db::table('staff')->field('id,salary')->where('id','>',1)->group('salary')->having('salary>5000')->buildSql();halt($res);监听sqlDb::listen(function($sql,$time,$explain){//记录SQLecho$sql.'['.$time.'s]';//查看性能分析结果dump($explain);});
nginx下htaccess配置项目根目录下(public下)新建命名为nginx.htaccess的文件,放入一下内容if(!-e$request_filename){rewrite^(.*)$/index.php?s=$1last;break;}apache下htaccess配置项目根目录下(public下)新建命名为.htaccess的文件(文件名前面带点)<IfModulemod_rewrite.c>Options+FollowSymlinks-MultiviewsRewriteEngineOnRewriteCond%{REQUEST_FILENAME}!-dRewriteCond%{REQUEST_FILENAME}!-fRewriteRule^(.*)$index.php?/$1[QSA,PT,L]</IfModule>
代码如下:统计个数:$list['num']=db('web_allocation')//表名->where($where_n)//查询条件->count('distinct(package_type)');//要统计的字段查询:$data=$test_data->Distinct(true)->field('descriprion')->order('descriptiondesc')->select()还有一种使用groupby这个更好用些。distinct只能对单一字段去重,而group适用于整个表,效果不错。推荐使用groupby
publicfunctionvip(){header('location:https://qun.qq.com/join.html');exit;}
publicfunctiongetLikeList($catalog_id,$size=20){$res=$this->field('id,title')->where('catalog_id',$catalog_id)->orderRaw("RAND()")//随机取->paginate($size);return$res;}可以直接使用orderRaw('RABD()');不限定条数
tp5给某个字段增加减少值减少:Db::name('song')->where('id',$song_id)->setDec('song_number',5);//给song_number减少5增加:Db::name('song')->where('id',$song_id)->setInc('song_number',5);//给song_number增加10tp6给某个字段增加减少值减少:$w['goodscar_id']=1;$A=Db::name('goodscar')->where($w)->dec('goods_number',2)->update();增加$w['goodscar_id']=1;$A=Db::name('goodscar')->where($w)->inc('goods_number',2)->update();
在TP5公共common.php文件里写<?php//计算某个类别所属的类别层数functiongetcatelayer($cateid,$flag=1){$cates=M('Gcategory');$ini['cate_id']=$cateid;$arr=$cates->where($ini)->find();if($arr['parent_id']!=0){$flag=getcatelayer($arr['parent_id'],$flag+1);}return$flag;}//类别递归(单层)functiongetone($arr,$parent=0,$lev=0){//迭代$task=array($parent);//任务数组$tree=array();//结果数组while(!empty($task)){$flg=false;foreach($arras$k=>$v){if($v['parent_id']==$parent){$tree[]=array('id'=>$v['cate_id'],'name'=>$v['cate_name'],'lev'=>$lev);array_push($task,$v['cate_id']);$parent=$v['cate_id'];$lev=$lev+1;unset($arr[$k]);$flg=true;}}if($flg==false){array_pop($task);$parent=end($task);$lev=$lev-1;}}return$tree;}//类别递归(多层)functiongetCates($arr,$pid=0){for($i=0;$i<count($arr);$i++){if($arr[$i]['parent_id']==$pid){$newArr[]=array("id"=>$arr[$i]['cate_id'],"name"=>$arr[$i]['cate_name'],'son'=>getCates($arr,$arr[$i]['cate_id']),);}}return$newArr;}//查询类别所属级functiongetlayer($cateid,$flg=1){$gcg=M("Gcategory");$ini["cate_id"]=$cateid;$cateArr=$gcg->where($ini)->find();if($cateArr['parent_id']!=0){$flg=getlayer($cateArr['parent_id'],$flg+1);}return$flg;}一般只用其中的递归单层就可以了控制器中<?php//分类管理namespaceapp\admin\Controller;usethink\Db;usethink\Controller;classCategoryControllerextendsController{/***分类列表页(递归)*/publicfunctioncategory_list(){header('content-type:text/html;charset=utf-8');$categoryArr=db::name('表名')->select();//调用递归函数$getall=getone($categoryArr);$this->assign("getall",$getall);return$this->fetch()}视图view中<divclass="conShow"><tableborder="1"cellspacing="0"cellpadding="0"><tr><tdwidth="100px"class="tdColortdC">id</td><tdwidth="150px"class="tdColor">汽车类型</td><tdwidth="180px"class="tdColor">操作</td></tr>{foreachname="getall"id="v"}<tr><td>{$v.id}</td><td>{php}echostr_repeat(' ',$v['lev']*2){/php}|-{$v['name']}</td><td><ahref="connoisseuradd.html"><imgclass="operation"src="/img/admin/update.png"></a><imgclass="operationdelban"src="/img/admin/delete.png"></td></tr>{/foreach}</table><divclass="paging">此处是分页</div></div>
前期准备新建控制器/application/index/controller/Index.php<?phpnamespaceapp\index\controller;//导入路由usethink\Route;classIndex{//创建demo方法,输出欢迎信息publicfunctiondemo($name='you',$course='php'){return'欢迎'.$name.'来到csdn学习'.$course.'开发技术~~';}}新建路由配置文件/application/route.php注意:route.php文件,仅当系统路由功能开启时,才有效<?phpusethink\Route;//创建规则[demo/],后面有二个可选参数,替换掉原来较长的URL地址Route::rule('demo/[:name]/[:course]','index/Index/demo');普通模式普通模式,又叫常规模式或传统模式,就是不开启路由功能时访问模式。普通模式:按PATH_INFO方式访问demo方法,按顺序传入参数name和course修改应用配置文件/application/config.php//关闭路由'url_route_on'=>false,//URL参数传递方式:按顺序解析'url_param_type'=>1,访问方式其实质就是:访问指定的方法,并传入正确的参数访问地址:http://www.zhansanjie.com/index/index/demo/tom/tp5混合模式(官方推荐方式)混合模式,又叫兼容模式。是指:虽然开启了路由功能,但并不强制使用。对同一方法(如demo),即可以用普通模式访问,也可以用路由模式访问修改路由配置//开启路由'url_route_on'=>true,//不强制使用路由'url_route_must'=>false,//URL参数传递方式:按顺序解析'url_param_type'=>1,访问方式http://www.zhansanjie.com/index/baby/python