ThinkPHP中SQL $map使用方法

ThinkPHP中SQL $map使用方法 发布時间: 来源于:不明 归类:技术性实例教程 创作者:岑溪网站建设 点一下:次
ThinkPHP内嵌了十分灵便的查寻方式,能够迅速的开展数据信息查寻实际操作,查寻标准能够用以CURD等一切实际操作,做为where方式的主要参数传到就可以,下边来逐一解读查寻語言的内函。 查寻方法 ThinkPHP能够适用立即应用标识符串做为查寻标准,可是大多数数状况强烈推荐应用数据库索引数字能量数组或是目标来做为查寻标准,由于会更为安全性。 一、应用标识符串做为查寻标准 它是最传统式的方法,可是安全性性不太高,比如: $User = M( User // 案例化User目标 $User- where( type=1 AND status=1 )- select();  最终转化成的SQL句子是 SELECT * FROM think_user WHERE type=1 AND status=1 二、应用数字能量数组做为查寻标准 $User = M( User // 案例化User目标 $condition[ name ] = thinkphp $condition[ status ] = 1;  // 把查寻标准传到查寻方式 $User- where($condition)- select();  最终转化成的SQL句子是 SELECT * FROM think_user WHERE `name`= thinkphp AND status=1 假如开展多字段名查寻,那麼字段名中间的默认设置逻辑性关联是 逻辑性与 AND,可是用下边的标准能够变更默认设置的逻辑性分辨,根据应用 _logic 界定查寻逻辑性: $User = M( User // 案例化User目标 $condition[ name ] = thinkphp $condition[ account ] = thinkphp $condition[ _logic ] = OR  // 把查寻标准传到查寻方式 $User- where($condition)- select();  最终转化成的SQL句子是 SELECT * FROM think_user WHERE `name`= thinkphp OR `account`= thinkphp 三、应用目标方法来查寻 (这儿以stdClass内嵌目标为例子) $User = M( User // 案例化User目标  // 界定查寻标准 $condition = new stdClass();  $condition- name = thinkphp   $condition- status= 1;  $User- where($condition)- select();  最终转化成的SQL句子和上边一样 SELECT * FROM think_user WHERE `name`= thinkphp AND status=1 应用目标方法查寻和应用数字能量数组查寻的实际效果是同样的,而且是能够交换的,大多数数状况下,大家提议选用数字能量数组方法更为高效率,后边大家会以数字能量数组方法为例子来说解实际的查寻語言使用方法。 表述式查寻 上边的查寻标准只是是一个简易的相同分辨,可使用查寻表述式适用大量的SQL查寻英语的语法,而且能够用以数字能量数组或是目标方法的查寻(下边仅以数字能量数组方法为例子表明),查寻表述式的应用文件格式: $map[ 字段名名 ] = array( 表述式 , 查寻标准 表述式分不清尺寸写,适用的查寻表述式有下边几类,各自表明的含意是: 表述式 含意 EQ 相当于(=) NEQ 不一于( ) GT 超过( ) EGT 超过相当于( =) LT 低于( ) ELT 低于相当于( =) LIKE 模糊不清查寻 [NOT] BETWEEN (没有)区段查寻 [NOT] IN (没有)IN 查寻 EXP 表述式查寻,适用SQL英语的语法 实例以下: EQ :相当于(=) $map[ id ]  = array( eq ,100); 和下边的查寻等效电路 $map[ id ]  = 100; 表明的查寻标准便是 id = 100   NEQ: 不一于( ) $map[ id ]  = array( neq ,100); 表明的查寻标准便是 id 100   GT:超过( ) $map[ id ]  = array( gt ,100); 表明的查寻标准便是 id 100   EGT:超过相当于( =) $map[ id ]  = array( egt ,100); 表明的查寻标准便是 id = 100   LT:低于( ) $map[ id ]  = array( lt ,100); 表明的查寻标准便是 id 100   ELT: 低于相当于( =) $map[ id ]  = array( elt ,100); 表明的查寻标准便是 id = 100   [NOT] LIKE: 同sql的LIKE $map[ name ] = array( like , thinkphp% 查寻标准就变为 name like thinkphp% 假如配备了DB_LIKE_FIELDS主要参数得话,一些字段名也会全自动开展模糊不清查寻。比如设定了: DB_LIKE_FIELDS = title|content 得话,应用 $map[ title ] = thinkphp 查寻标准便会变为 name like %thinkphp% 适用数字能量数组方法,比如 $map[ a ] =array( like ,array( %thinkphp% , %tp ), OR $map[ b ] =array( notlike ,array( %thinkphp% , %tp ), AND 转化成的查寻标准便是: (a like %thinkphp% OR a like %tp ) AND (b not like %thinkphp% AND b not like %tp )   [NOT] BETWEEN :同sql的[not] between, 查寻标准适用标识符串或是数字能量数组,比如: $map[ id ]  = array( between , 1,8 和下边的等效电路: $map[ id ]  = array( between ,array( 1 , 8 查寻标准就变为 id BETWEEN 1 AND 8   [NOT] IN: 同sql的[not] in ,查寻标准适用标识符串或是数字能量数组,比如: $map[ id ]  = array( not in , 1,5,8 和下边的等效电路: $map[ id ]  = array( not in ,array( 1 , 5 , 8 查寻标准就变为 id NOT IN (1,5, 8) EXP:表述式,适用更繁杂的查寻状况 $map[ id ]  = array( in , 1,3,8 能够改为: $map[ id ]  = array( exp , IN (1,3,8) exp查寻的标准不容易被当做标识符串,因此后边的查寻标准可使用一切SQL适用的英语的语法,包含应用涵数和字段名名字。查寻表述式不但能用于查寻标准,还可以用以数据信息升级,比如: $User = M( User // 案例化User目标  // 要改动的数据信息目标特性取值 $data[ name ] = ThinkPHP $data[ score ] = array( exp , score+1 // 客户的積分加1 $User- where( id=5 )- save($data); // 依据标准储存改动的数据信息 便捷查寻 新版本提升了便捷查寻方法,能够进一步简单化查寻标准的书写,比如: 一、完成不一样字段名同样的查寻标准 $User = M( User // 案例化User目标 $map[ name|title ] = thinkphp  // 把查寻标准传到查寻方式 $User- where($map)- select();  查寻标准就变为 name= thinkphp OR title = thinkphp   二、完成不一样字段名不一样的查寻标准 $User = M( User // 案例化User目标 $map[ status title ] =array( 1 , thinkphp , _multi = true);  // 把查寻标准传到查寻方式 $User- where($map)- select();  _multi = true务必加在数字能量数组的最终,表明当今是好几条件配对,那样查寻标准就变为 status= 1 AND title = thinkphp ,查寻字段名适用大量的,比如: $map[ status score title ] =array( 1 ,array( gt , 0 ), thinkphp , _multi = true); 查寻标准就变为 status= 1 AND score 0 AND title = thinkphp   留意:便捷查寻方法中 | 和 不可以同时应用。 区段查寻 ThinkPHP适用对某一字段名的区段查寻,比如: $map[ id ] = array(array( gt ,1),array( lt ,10)) ; 获得的查寻标准是: (`id` 1) AND (`id` 10) $map[ id ] = array(array( gt ,3),array( lt ,10), or 获得的查寻标准是: (`id` 3) OR (`id` 10) $map[ id ]  = array(array( neq ,6),array( gt ,3), and   获得的查寻标准是:(`id` != 6) AND (`id` 3) 最终一个能够是AND、 OR或是 XOR计算符,假如不写,默认设置是AND计算。 区段查寻的标准能够适用一般查寻的全部表述式,换句话说相近LIKE、GT和EXP那样的表述式都可以以适用。此外区段查寻还能够适用大量的标准,要是是对于一个字段名的标准都可以以提到一起,比如: $map[ name ]  = array(array( like , %a% ), array( like , %b% ), array( like , %c% ), ThinkPHP , or   最终的查寻标准是: (`name` LIKE %a% ) OR (`name` LIKE %b% ) OR (`name` LIKE %c% ) OR (`name` = ThinkPHP ) 组成查寻 假如你必须在查寻的情况下同时有时候应用标识符串却又不期待遗失数字能量数组方法的灵便得话,能够考虑到应用组成查寻。 组成查寻的行为主体還是选用数字能量数组方法查寻,仅仅添加了一些独特的查寻适用,包含标识符串方式查寻(_string)、复合型查寻(_complex)、恳求标识符串查寻(_query),混和查寻中的独特查寻每一次查寻只有界定一个,因为选用数字能量数组的数据库索引方法,数据库索引同样的独特查寻会被遮盖。 一、标识符串方式查寻(选用_string 做为查寻标准) 数字能量数组标准还能够和标识符串标准混和应用,比如: $User = M( User // 案例化User目标 $map[ id ] = array( neq ,1); $map[ name ] = ok $map[ _string ] = status=1 AND score 10 $User- where($map)- select();  最终获得的查寻标准就变成: ( `id` != 1 ) AND ( `name` = ok ) AND ( status=1 AND score 10 )   二、恳求标识符串查寻方法 恳求标识符串查寻是一类型似于URL传参的方法,能够适用简易的标准相同分辨。 $map[ id ] = array( gt , 100 $map[ _query ] = status=1 score=100 _logic=or 获得的查寻标准是:`id` 100 AND (`status` = 1 OR `score` = 100 )   三、复合型查寻 复合型查寻非常于封裝了一个新的查寻标准,随后划入原先的查寻标准当中,因此能够进行较为繁杂的查寻标准拼装。 $where[ name ]  = array( like , %thinkphp% $where[ title ]  = array( like , %thinkphp% $where[ _logic ] = or $map[ _complex ] = $where; $map[ id ]  = array( gt ,1); 查寻标准是  ( id 1) AND ( ( name like %thinkphp% ) OR ( title like %thinkphp% ) ) plex做为子查寻标准而定义,相互配合以前的查寻方法,能够十分灵便的制订更为繁杂的查寻标准。 许多查寻方法能够互相变换,比如上边的查寻标准能够改为: $where[ id ] = array( gt ,1); $where[ _string ] = (name like %thinkphp% )  OR ( title like %thinkphp ) 最终转化成的SQL句子是一致的。 统计分析查寻 在运用中大家常常用到到一些统计分析数据信息,比如当今全部(或是考虑一些标准)的客户数、全部客户的较大積分、客户的均值考试成绩这些,ThinkPHP为这种统计分析实际操作出示了一系列产品的内嵌方式,包含: 方式 表明 Count 统计分析总数,主要参数是要统计分析的字段名名(可选择) Max 获得较大值,主要参数是要统计分析的字段名名(务必) Min 获得最少值,主要参数是要统计分析的字段名名(务必) Avg 获得均值值,主要参数是要统计分析的字段名名(务必) Sum 获得总分,主要参数是要统计分析的字段名名(务必) 使用方法实例: $User = M( User // 案例化User目标 获得客户数: $userCount = $User- count(); 或是依据字段名统计分析: $userCount = $User- count( id 获得客户的较大積分: $maxScore = $User- max( score 获得積分超过0的客户的最少積分: $minScore = $User- where( score 0 )- min( score 获得客户的均值積分: $avgScore = $User- avg( score 统计分析客户的总分: $sumScore = $User- sum( score 而且全部的统计分析查寻均适用连贯性实际操作的应用。 精准定位查寻 ThinkPHP适用精准定位查寻,可是规定当今实体模型务必承继高級实体模型类才可以应用,可使用getN方式立即回到查寻結果中的某一部位的纪录。比如:   获得合乎标准的第三条纪录: $User- where( score 0 )- order( score desc )- getN(2);  获得合乎标准的最终第二条纪录: $User- where( score 80 )- order( score desc )- getN(-2);  获得第一条纪录: $User- where( score 80 )- order( score desc )- first();  获得最终一条纪录: $User- where( score 80 )- order( score desc )- last(); SQL查寻 ThinkPHP内嵌的ORM和ActiveRecord方式完成了便捷的数据信息存储实际操作,并且新版本提升的连贯性实际操作作用也是让这一数据信息实际操作更为清楚,可是ThinkPHP依然保存了原生态的SQL查寻和实行实际操作适用,以便考虑繁杂查寻的必须和一些独特的数据信息实际操作,SQL查寻的回到值由于是立即回到的Db类的查寻結果,沒有做一切的解决。关键包含下边2个方式: 1、query方式 query  实行SQL查寻实际操作 使用方法 query($sql,$parse=false) 主要参数 query(务必):要查寻的SQL句子 parse(可选择):是不是必须分析SQL 回到值 假如数据信息不法或是查寻不正确则回到false     不然回到查寻結果数据信息集(同select方式)   应用实例: $Model = new Model() // 案例化一个model目标 沒有相匹配一切数据信息表 $Model- query( select * from think_user where status=1 假如你当今选用了遍布式数据信息库,而且设定了读写能力分离出来得话,query方式自始至终是在学网络服务器实行,因而query方式相匹配的全是读实际操作,而无论你的SQL句子是啥。 2、execute方式 execute用以升级和载入数据信息的sql实际操作 使用方法 execute($sql,$parse=false) 主要参数 query(务必):要实行的SQL句子 parse(可选择):是不是必须分析SQL 回到值 假如数据信息不法或是查寻不正确则回到false  不然回到危害的纪录数 应用实例: $Model = new Model() // 案例化一个model目标 沒有相匹配一切数据信息表 $Model- execute( update think_user set name= thinkPHP where status=1 假如你当今选用了遍布式数据信息库,而且设定了读写能力分离出来得话,execute方式自始至终是在写网络服务器实行,因而execute方式相匹配的全是写实际操作,而无论你的SQL句子是啥。 3、别的方法 全自动获得当今表名 一般应用原生态SQL必须手动式再加当今要查寻的表名,假如你的表名之后能变化得话,那麼就必须改动每一个原生态SQL查寻的sql句子了,对于这一状况,系统软件还出示了一个小的方法来协助处理这一难题。 $model = M( User $model- query( select * from __TABLE__ where status 1 大家这儿应用了__TABLE__ 那样一字符串,系统软件在分析的情况下会全自动更换成当今实体模型相匹配的表名,那样便可以保证即便实体模型相匹配的表名有一定的转变,依然无需改动原生态的sql句子。   适用连贯性实际操作和SQL分析 新版本对query和execute2个原生态SQL实际操作方式提升第二个主要参数适用, 表明是不是必须分析SQL (默认设置为false 表明立即实行sql ),假如设成true 则会分析SQL中的独特标识符串 (必须相互配合连贯性实际操作)。 比如,适用 以下书写: $model- table( think_user )       - where(array( name = thinkphp ))       - field( id,name,email )       - query( select %FIELD% from %TABLE% %WHERE% ,true); 在其中query方式中的%FIELD%、%TABLE%和%WHERE%标识符串会全自动更换对同名的连贯性实际操作方式的分析結果SQL,适用的更换标识符串包含: 更换标识符串 相匹配连贯性实际操作方式 %FIELD% field %TABLE% table %DISTINCT% distinct %WHERE% where %JOIN% join %GROUP% group %HAVING% having %ORDER% order %LIMIT% limit %UNION% union 动态性查寻 依靠PHP5語言的特点,ThinkPHP完成了动态性查寻,包含下边几类: 方式名 表明 举例说明 getBy 依据某一字段名的值查寻数据信息 比如,getByName,getByEmail getFieldBy 依据某一字段名查寻并回到某一字段名的值 比如,getFieldByName top 获得前是多少条纪录(必须高級实体模型适用) 比如,top8,top12 一、getBy动态性查寻 该查寻方法对于数据信息表的字段名开展查寻。比如,User目标有着id,name,email,address 等特性,那麼大家便可令其用下边的查寻方式来立即依据某一特性来查寻合乎标准的纪录。 $user = $User- getByName( liu21st $user = $User- getByEmail( liu21st $user = $User- getByAddress( 我国深圳市 临时不兼容大部分据字段名的动态性查寻方式,请应用find方式和select方式开展查寻。 二、getFieldBy动态性查寻 对于某一字段名查寻并回到某一字段名的值,比如 $user = $User- getFieldByName( liu21st , id 表明依据客户的name获得客户的id值。 三、top动态性查寻 ThinkPHP还出示了此外一种动态性查寻方法,便是获得合乎标准的前N条纪录(和精准定位查寻一样,还要求当今实体模型类务必承继高級实体模型类后才可以应用)。比如,大家必须获得当今客户中積分超过0,積分最大的前5位客户 : $User- where( score 80 )- order( score desc )- top5(); 要获得積分的前八位能够改为: $User- where( score 80 )- order( score desc )- top8(); 新版本增加了子查寻适用,有二种应用方法: 1、应用select方式 当select方式的主要参数为false的情况下,表明不开展查寻仅仅回到搭建SQL,比如: // 最先结构子查寻SQL  $subQuery = $model- field( id,name )- table( tablename )- group( field )- where($where)- order( status )- select(false);  2、应用buildSql方式 $subQuery = $model- field( id,name )- table( tablename )- group( field )- where($where)- order( status )- buildSql();  启用buildSql方式后不容易开展具体的查寻实际操作,而仅仅转化成该次查寻的SQL句子(以便防止搞混,会在SQL两侧再加括弧),随后大家立即在事后的查寻中立即启用。 // 运用子查寻开展查寻  $model- table($subQuery. a )- where()- order()- select()  结构的子查寻SQL能用于TP的连贯性实际操作方式,比如table where等。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://jzabcd.cn/ganhuo/3810.html