做影视网站会侵权犯法吗,广州南沙发布,网站建设广告合同需要交印花税吗,成都网站建设赢展今天来给大家讲下查询最常用但也是最复杂的where方法#xff0c;where方法也属于模型类的连贯操作方法之一#xff0c;主要用于查询和操作条件的设置。where方法的用法是ThinkPHP查询语言的精髓#xff0c;也是ThinkPHP ORM的重要组成部分和亮点所在#xff0c;可以完成包括…今天来给大家讲下查询最常用但也是最复杂的where方法where方法也属于模型类的连贯操作方法之一主要用于查询和操作条件的设置。where方法的用法是ThinkPHP查询语言的精髓也是ThinkPHP ORM的重要组成部分和亮点所在可以完成包括普通查询、表达式查询、快捷查询、区间查询、组合查询在内的查询操作。where方法的参数支持字符串和数组虽然也可以使用对象但并不建议。字符串条件使用字符串条件直接查询和操作例如$User M(User);// 实例化User对象$User-where(type1 AND status1)-select();最后生成的SQL语句是SELECT *FROM think_user WHERE type1AND status1如果使用3.1以上版本的话使用字符串条件的时候建议配合预处理机制确保更加安全例如$Model-where(id%d and username%s andxx%f,array($id,$username,$xx))-select();或者使用$Model-where(id%d and username%s and xx%f,$id,$username,$xx)-select();如果$id变量来自用户提交或者URL地址的话如果传入的是非数字类型则会强制格式化为数字格式后进行查询操作。字符串预处理格式类型支持指定数字、字符串等具体可以参考vsprintf方法的参数说明。数组条件数组条件的where用法是ThinkPHP推荐的用法。普通查询最简单的数组查询方式如下$User M(User);// 实例化User对象$map[name]thinkphp;$map[status]1;// 把查询条件传入查询方法$User-where($map)-select();最后生成的SQL语句是SELECT *FROM think_user WHERE namethinkphpAND status1表达式查询上面的查询条件仅仅是一个简单的相等判断可以使用查询表达式支持更多的SQL查询语法查询表达式的使用格式$map[字段1]array(表达式,查询条件1);$map[字段2]array(表达式,查询条件2);$Model-where($map)-select();// 也支持表达式不分大小写支持的查询表达式有下面几种分别表示的含义是表达式含义EQ等于()NEQ不等于()GT大于()EGT大于等于()LT小于(ELT小于等于()LIKE模糊查询[NOT] BETWEEN(不在)区间查询[NOT] IN(不在)IN 查询EXP表达式查询支持SQL语法示例如下EQ 等于()例如$map[id]array(eq,100);和下面的查询等效$map[id]100;表示的查询条件就是 id 100NEQ 不等于()例如$map[id]array(neq,100);表示的查询条件就是 id 100GT大于()例如$map[id]array(gt,100);表示的查询条件就是 id 100EGT大于等于()例如$map[id]array(egt,100);表示的查询条件就是 id 100LT小于(例如$map[id]array(lt,100);表示的查询条件就是 id 100ELT 小于等于()例如$map[id]array(elt,100);表示的查询条件就是 id 100[NOT] LIKE 同sql的LIKE例如$map[name]array(like,thinkphp%);查询条件就变成 name like thinkphp%如果配置了DB_LIKE_FIELDS参数的话某些字段也会自动进行模糊查询。例如设置了DB_LIKE_FIELDStitle|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,score1);// 用户的积分加1$User-where(id5)-save($data);// 根据条件保存修改的数据快捷查询where方法支持快捷查询方式可以进一步简化查询条件的写法例如一、实现不同字段相同的查询条件$User M(User);// 实例化User对象$map[name|title]thinkphp;// 把查询条件传入查询方法$User-where($map)-select();查询条件就变成 name thinkphp OR title thinkphp二、实现不同字段不同的查询条件$User M(User);// 实例化User对象$map[statustitle]array(1,thinkphp,_multitrue);// 把查询条件传入查询方法$User-where($map)-select();_multitrue必须加在数组的最后表示当前是多条件匹配这样查询条件就变成 status 1 AND title thinkphp 查询字段支持更多的例如$map[statusscoretitle] array(1,array(gt,0),thinkphp,_multitrue);查询条件就变成 status 1 AND score 0 AND title thinkphp注意快捷查询方式中“|”和“”不能同时使用。区间查询where方法支持对某个字段的区间查询例如$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);最后的查询条件是(nameLIKE %a%)OR (nameLIKE %b%)OR (nameLIKE %c%)OR (nameThinkPHP)组合查询组合查询用于复杂的查询条件如果你需要在查询的时候同时偶尔使用字符串却又不希望丢失数组方式的灵活的话可以考虑使用组合查询。组合查询的主体还是采用数组方式查询只是加入了一些特殊的查询支持包括字符串模式查询(_string)、复合查询(_complex)、请求字符串查询(_query)混合查询中的特殊查询每次查询只能定义一个由于采用数组的索引方式索引相同的特殊查询会被覆盖。一、字符串模式查询(采用_string 作为查询条件)数组条件还可以和字符串条件混合使用例如$User M(User);// 实例化User对象$map[id]array(neq,1);$map[name]ok;$map[_string]status1 AND score10;$User-where($map)-select();最后得到的查询条件就成了( id ! 1 ) AND ( name ok ) AND ( status1 AND score10 )二、请求字符串查询方式请求字符串查询是一种类似于URL传参的方式可以支持简单的条件相等判断。$map[id]array(gt,100);$map[_query]status1score100_logicor;得到的查询条件是id100 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%) )复合查询使用了_complex作为子查询条件来定义配合之前的查询方式可以非常灵活的制定更加复杂的查询条件。很多查询方式可以相互转换例如上面的查询条件可以改成$where[id]array(gt,1);$where[_string] (name like %thinkphp%) OR ( title like %thinkphp) ;最后生成的SQL语句是一致的。多次调用3.1.3版本开始where方法支持多次调用但字符串条件只能出现一次例如$map[a]array(gt,1);$where[b]1;$Model-where($map)-where($where)-where(status1)-select();多次的数组条件表达式会最终合并但字符串条件则只支持一次。这就是微学网-程序员之家为你提供的thinkphp where()条件查询希望对你有所帮助.本文来自网络转载请注明出处http://www.weixuecn.cn/article/7432.html