欢迎来到DT模板堂 登录 注册
DT教程
当前位置:首页 > 教程 > 二开教程> DTapi教程:26.数据库操作之 查询

DTapi教程:26.数据库操作之 查询

发表:DESTOON模板堂(dtmoban.com) 发表时间:2019-10-11
 

示例

查询供应信息
1.原生的destoon查询方法

$r = DB::get_one("select count(*) as num  from {$DT_PRE}sell_5 where status=3"); $items = $r['num']; $pages = pages($items,$page,$pagesize); if($items){     $lists = array();     $result = DB::query("select * from {$DT_PRE}sell_5 where status=3 order by addtime desc limit $page,$offset");     while($r = DB::fetch_array($result)){         $lists[] = $r;     } }  

原生destoon查询一个供应列表信息并且分页调用,总共用了十行代码,有点烦锁,对于php新人来说确实难以记忆。

2.DTapi查询方法,

$lists = Db::table('sell_5')->condition("status=3")->order("addtime desc")->page($page,$pagesize)->showpage()->get_lists(); 

DTapi实现同样的效果,只用了一行代码,对的就是一行代码,就是这么简单。

##查询语句基本构成
因为使用DTapi的大多是php新人,对面向对像编程可能不理解其原理,所以也就无从理解对像的链式操作,这里我们也就不深究其原理了,只要学会用就行了。用的多了慢慢就明白了,我当时作为菜鸟时也是这么过来的。

DTapi的查询操作基本构成

1.查询多条信息
$data = Db::table('sell_5')->get_lists();
2.查询单条信息
$data = Db::table('sell_5')->get_one();

其中table('不加前缀的表名') 是必须的方法,告诉数据库要查询哪个表。
get_lists() 和get_one() 是二选一的必须方法,告诉数据库我是要查询单条信息还是多条信息。

除了以上三个方法是必须方法外,其它的都是可选方法。

##必须方法

table()方法

    告诉数据要查询哪个表,记住不需要带前缀。     例:table('sell_5')     table方法必须跟在 Db:: 后面,否则会报错     例:Db::table('sell_5') 

get_lists()方法

    告诉数据库,我要查询的是多条数据,返回的是一个二维数组。     例:Db::table('sell_5')->get_lists();     get_lists方法必须在查询语句的最后面,因为get_lists前面的方法是生成一条可执行的sql语句,调用get_lists后才会向数据库发起请求;如果不放最后面的话,就会造成位于get_lists后面的方法还没执行到就已经向数据库发起请求了。 

get_one()方法

    告诉数据库,我要查询的是单条数据,返回的是一个一维数组。     例:Db::table('sell_5')->get_one();      get_one()必须在查询语句的最后面,与get_lists()方法同理。 

提醒

三个必须方法构成了一次基本的数据库查询请求,然后配合辅助的非必须的方法,我们就可以查询自己想要的信息了。

可选方法

可选方法使我们的查询更精确,返回我们实际需要的结果。

condition()方法

   告诉数据库,我要查询的条件。    例:Db::table('sell_5')->condition("status=3")->get_lists();    condition()方法只有一个参数,如果要查询多个条件,使用原生sql方式组装表达式即可。    例:Db::table('sell_5')->condition("status=3 and catid=10 and areaid=1")->get_lists();          注意:一条查询表达式中只能使用一次condtion()方法,如果多次使用 后面的会覆盖前面的。    例: Db::table('sell_5')->condition("status=3")->condition("catid=10")->get_lists();    后面的catid=10会覆盖前面的status=3 

where()方法

  与condition方法一样,告诉数据库,我要查询的条件。    例:Db::table('sell_5')->where("status=3")->get_lists();    等同于:Db::table('sell_5')->condition("status=3")->get_lists();     where()方法和condition()功能是一样的,但是where()方法比condition()的使用方式更多,更类似于tinkphp。    在单条件查询时几乎是看不出两者的区别,但在多条件查询时where()的使用简便性就出来了。      例: 
    //方式一,和condition()一样的用     Db::table('sell_5')->where("status=3 and catid=10 and areaid=1")->get_lists();     //方式二,表达式中多个where()方法    Db::table('sell_5')->where("status=3")->where("catid=10")->where("areaid=1")->get_lists();     //方式三,数组用法       $where[] = "status=3";       $where[] = "catid=10";       $where[] = "areaid=1";       Db::table('sell_5')->where($where)->get_lists(); 

学会了吗?您觉得是where()方法好用,还是condition()方法好用呢?
我本人习惯用condition()方法,可能是我原生开发时间长了的原故,但是如果您是thinkphp入门的php,可能更容易接受where()方法。

whereor()方法

前面刚学习了where()方法,但是where()方法如果使用方式二和方式三连接多条件时,每个条件之间都是使用 AND 来连接的。如果我们第二个条件和第三件条件是需要用 or 连接怎么办呢? 要么使用condition()方法,要么使用 where()的方式一。但是这两种方式都不习惯使用,于是whereor()方法的用武之地就来了。

例: 
      $where[] = "status=3";       $where[] = "catid=10";       Db::table('sell_5')->where($where)->whereor("areaid=1")->get_lists(); 

生成的sql语句

      select * from destoon_sell_5 where status=3 and catid=10 or areaid=1  

提醒

在查询表达式中,where()、whereor() 不能与condition()共存,condition()会覆盖表达式中的where()和whereor()方法。
在DTapi中与条件构建有关的方法暂时就这三个,并不像其它框架那么多,因为这三个已经够用了,没必要增加一些基本用不上的方法去增加小伙伴们的学习难度。

field()方法

告诉数据库我要查返回哪些字段,每个字段之间用逗号隔开,如果不传该方法,则默认返回所有的字段。

例:
Db::table('sell_5')->field("title,itemid,thumb,price,addtime")->condition("status=3 and catid=10")->get_lists();

order() 方法

告诉数据库我要使用的排序方式
例:

//单个排序条件 Db::table('sell_5')->field("title,itemid,thumb,price,addtime")->condition("status=3 and catid=10")->order("addtime desc")->get_lists(); //多个排序条件,每个之间逗号隔开 Db::table('sell_5')->field("title,itemid,thumb,price,addtime")->condition("status=3 and catid=10")->order("addtime desc,level desc,hits desc")->get_lists(); 

group()方法

告诉数据库我要使用的分组方式,对应mysql group by
例:

//单个条件 Db::table('sell_5')->field("title,itemid,thumb,price,addtime")->condition("status=3 and catid=10")->group("username")->order("addtime desc,level desc,hits desc")->get_lists();  //多个条件 Db::table('sell_5')->field("title,itemid,thumb,price,addtime")->condition("status=3 and catid=10")->group("username,areaid")->order("addtime desc,level desc,hits desc")->get_lists(); 

page()方法

指定位置查询,用于分页查询,对应 mysql 的 limit 方法
page()方法有两个参数: page(当前页码,每页数量)
例:

//查询第二页的信息,每页10条 Db::table('sell_5')->page(2,10)->get_lists(); 

生成的sql 语句

select * from destoon_sell_5 limit 10,10 

注意:page()方法的两个参数都是必填参数

cache()方法

缓存设置,用于实时性要求不高的查询,降低mysql的负载。

cache(缓存秒数) 只有一个参数,缓存时间,单位是秒。

例: Db::table('sell_5')->page(2,10)->cache(60)->get_lists();
设置了缓存时间为60秒。

debug()方法

用于输出打印本次链式操作生成的sql语句,调试时使用。

例: Db::table('sell_5')->page(2,10)->cache(60)-debug()->get_lists();
页面会输出:select * from destoon_sell_5 limit 10,10

showpage()方法

用于获取分页,无参数,用来代替destoon原来的

$r = DB::get_one("select count(*) as num  from {$DT_PRE}sell_5 where status=3"); $items = $r['num']; $pages = pages($items,$page,$pagesize); 

看起来是简单多了。
示例:Db::table('sell_5')->page(2,10)->cache(60)-showpage()->get_lists();

提示:使用了showpage()方法后,在表达式的下面就可以使用 $items 来获取本次查询的总数量。

showpage() 方法只能在使用get_lists()查询列表时才有效,不能用于get_one()

showcat() 方法

用于联查询信息对应的分类称和连接地址,无参数

只有在 destoon的模块主表查询时才会有效,使用了showcat() 方法后,可在模板循环中使用 {$t[catname]} 调用分类名称, {$t[caturl]}调用分类地址

特定条件下才能使用的方法

moduleid()方法

该方法只有在非静态使用Db对像时才有效

例:

//这样用是不行的,会报错 Db::moduleid(5)->get_lists();     //得下面这样用 $db = new Db(); $db->moduleid(5)->get_lists(); 

moduleid(模块id) 只有一个参数: 模块id

在查询模块主表信息时,可以替换table()方法。

提示:使用moduleid() 方法,必须先new Db() 对像

db() 方法

选择从指定的数据库查询,用于主从分离,多数据库时。

db(数据库id) 一个参数:数据库id

该方法只能在安装了www.dtmoban.com 的主从分离,多从库的插件时才有效。

这是一个收费插件,需要的伙伴可以找作者咨询。



电话: 1392 8916 720   客服QQ:56667115

© 2014-2015 DESTOON模板堂(dtmoban.com) 版权所有,并保留所有权利。

二维码

扫一扫
获取更多资讯