-
模糊查询
2019-06-17 21:38:16模糊查询 开发工具与关键技术:Visual Studio 2015 作者:徐晶旗 撰写时间:2019年6月16日 今天来介绍一下模糊查询,模糊查询是什么呢?模糊查询是目前计算机查找信息用得最多的一种搜索工具,它主要用于与“数据”...模糊查询
开发工具与关键技术:Visual Studio 2015 作者:徐晶旗 撰写时间:2019年6月16日
今天来介绍一下模糊查询,模糊查询是什么呢?模糊查询是目前计算机查找信息用得最多的一种搜索工具,它主要用于与“数据”相关的栏目,通过它可快速查找到想要的信息,通常是用关键字进行模糊查找,所谓关键字就是登记信息中所包含的字符,如:到百度中要搜某方面的知识 当摸索目标不是很明确的时候,比如你想要搜索某个名人,可能一下子突然忘了他叫什么名字,只记得他的姓氏,.就可进行模糊搜索,这时候只是对姓氏进行匹配,而不查找全称,当然结果是你可能获得一大批你不想要的信息,不过可以多加些搜索条件也可以达到搜索目的.这就是根据sql语句想到的,还有就是到淘宝中想买一件心仪的衣服,然后你只要把你想要的衣服类型通过在淘宝中输入关键字就会筛选出一大批类似的衣服供你挑选,你就可以在这些衣服中慢慢找出自己喜欢的衣服了。这也就是模糊查询的好处了。
接下来就来做一下模糊查询的功能:
先到要查询的具体位置给它设置一个id。<input type="button" id="Aa">
然后到jsp中获取到这个按钮,给它一个点击事件,然后申明几个变量名,使它的名字等于要进行筛选位置的id名,注:这里的“brave”,”text”是两个input标签中的id名,然后把它拼接起来接收要赋的值。再去查询这些传输进来的值。
$("#Aa").click(function () { var bra = $("#brave").val(); var texs = $("#text").val(); var str = "bra=" + bra + "&texs=" + texs; tbinspiration.search(str); })
然后到控制器中写查询的方法,再把这两个变量名传参到这个方法中,然后再进行判断,先判断传入进来的数据是否为空,再进行如果左边input标签中的值等于某种值的话,右边input标签就转化成某种类型的字符串。这样就利于查找出要查找的数据。至于查询的方法我这里就不写了,下面是一些判断的代码。
if (!String.IsNullOrEmpty(bra)) { if (!String.IsNullOrEmpty(texs)) { if (bra == "CommodityStyleNumber") { list = list.Where(m => (m.CommodityStyleNumber).ToUpper().Contains(texs.ToUpper())).ToList(); bsgrid.success = true; } if (bra == "CommodityName") { list = list.Where(m => (m.CommodityName).ToLower().Contains(texs.ToLower())).ToList(); bsgrid.success = true; } if (bra == "Amount") { list = list.Where(m => m.Amount >= Convert.ToInt16(texs)).ToList(); bsgrid.success = true; } if (bra == "TagPrice") { list = list.Where(m => m.TagPrice >= Convert.ToInt16(texs)).ToList(); bsgrid.success = true; }
看下面的图片是数据库中所有的数据
然后通过关键字搜索就搜出了带有关键字的全部数据,这样就实现了模糊查询了。 -
java之模糊查询
2017-06-26 22:23:55由于项目中有很多地方设置了搜索框,所以搜索框之模糊查询势在必得;今晚笔者将详细讲解java之模糊查询的细节及要点,希望能给大伙带来启发。 2.实现方案 后台代码: ①UserInfo实体类的定义 public class ...1.场景还原
由于项目中有很多地方设置了搜索框,所以搜索框之模糊查询势在必得;今晚笔者将详细讲解java之模糊查询的细节及要点,希望能给大伙带来启发。
2.实现方案
后台代码:
①UserInfo实体类的定义
public class UserInfo { private String username; private Integer age; private String sex; private String phone; private String address; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
②模糊查询sql语句
<select id="getUserInfoByName" parameterType="String" resultType="com.cckj.bean.UserInfo"> select * from userinfo <where> <if test="_parameter!=null"> username like '%${_parameter}%' </if> </where> </select>
其中要注意的是,在判断语句中如果入参是String的话,入参全用_parameter代替,否则会报错;
或者
<select id="getUserInfoByName" parameterType="String" resultType="com.cckj.bean.UserInfo"> select * from userinfo <where> <if test="_parameter!=null"> username like CONCAT('%', #{_parameter} , '%') </if> </where> </select>
两者效果相同,建议第二种;
③dao层的申明
@Repository public interface UserInfoDao { List<UserInfo> getUserInfo(); List<UserInfo> getUserInfoByName(String username); }
④实现类层impl
@Service("UserInfoService") public class UserInfoServiceImpl implements UserInfoService { @Autowired UserInfoDao userInfoDao; @Override public List<UserInfo> getUserInfo() { return userInfoDao.getUserInfo(); } @Override public List<UserInfo> getUserInfoByName(String username) { return userInfoDao.getUserInfoByName(username); } }
⑤controller层
@RestController @RequestMapping("/userInfo") public class UserInfoController extends BaseController { @Autowired UserInfoService userInfoService; @RequestMapping(value = "/getUserInfo", produces = "application/json;charset=utf-8") public Map<String,Object> getUserInfo(HttpServletResponse response){ response.setHeader("Access-Control-Allow-Origin","*"); List<UserInfo> userList = userInfoService.getUserInfo(); Map<String,Object> map = new HashMap<>(); map.put("userInfoList",userList); map.put("status",1); return map; } @RequestMapping(value = "/getUserInfoByName", produces = "application/json;charset=utf-8") public Map<String,Object> getUser(HttpServletResponse response,String username){ response.setHeader("Access-Control-Allow-Origin","*"); List<UserInfo> userList = userInfoService.getUserInfoByName(username); Map<String,Object> map = new HashMap<>(); map.put("userlist",userList); map.put("status",1); return map; } }
前端代码:
①待动态数据渲染的div
<div class="grid-body"> <!-- <div class="grid-item"> <span class="row-1">zhangxing</span> <span class="row-1">24</span> <span class="row-1">男</span> <span class="row-1">18772351259</span> <span class="row-1">浙江西湖</span> </div> <div class="grid-item"> <span class="row-1">lisishan</span> <span class="row-1">23</span> <span class="row-1">女</span> <span class="row-1">17682317584</span> <span class="row-1">浙江余杭</span> </div> --> </div>
②通过后台的list的length动态添加div
function initdata(){ alert("进来了"); $.ajax({ type: "get", url: "http://dajiu.ngrok.cc/userInfo/getUserInfo", success: function(data, textStatus){ alert(data.userInfoList[1].username); if(data.status == 1){ for (var i =0;i<data.userInfoList.length;i++) { name ="name"+i; age = "age"+i; sex = "sex"+i; phone ="phone"+i; address = "address"+i; $(".grid-body").append('<div class="grid-item">\ <span class="row-1" id="'+name+'">lisishan</span>\ <span class="row-1" id="'+age+'">23</span>\ <span class="row-1" id="'+sex+'">女</span>\ <span class="row-1" id="'+phone+'">17682317584</span>\ <span class="row-1" id="'+address+'">浙江余杭</span>\ </div>'); document.getElementById(name).innerHTML=data.userInfoList[i].username; document.getElementById(age).innerHTML=data.userInfoList[i].age; document.getElementById(sex).innerHTML=data.userInfoList[i].sex; document.getElementById(phone).innerHTML=data.userInfoList[i].phone; document.getElementById(address).innerHTML=data.userInfoList[i].address; } } }, complete: function(XMLHttpRequest, textStatus){ }, error: function(){ alert("请求网络失败!。。。。。。"); } }); }
③第二次模糊查询,先清除之前的div,再进行动态数据渲染
/**模糊搜索 * [search description] * @return {[type]} [description] */ function search(){ var nicheng =document.getElementById("nicheng").value; $('.grid-item').remove(); $.ajax({ type: "get", url: "http://dajiu.ngrok.cc/userInfo/getUserInfoByName?username="+nicheng, success: function(data, textStatus){ if(data.status == 1){ for (var j =0;j<data.userlist.length;j++) { name ="name"+j; age = "age"+j; sex = "sex"+j; phone ="phone"+j; address = "address"+j; $(".grid-body").append('<div class="grid-item">\ <span class="row-1" id="'+name+'"></span>\ <span class="row-1" id="'+age+'"></span>\ <span class="row-1" id="'+sex+'"></span>\ <span class="row-1" id="'+phone+'"></span>\ <span class="row-1" id="'+address+'"></span>\ </div>'); document.getElementById(name).innerHTML=data.userlist[j].username; document.getElementById(age).innerHTML=data.userlist[j].age; document.getElementById(sex).innerHTML=data.userlist[j].sex; document.getElementById(phone).innerHTML=data.userlist[j].phone; document.getElementById(address).innerHTML=data.userlist[j].address; } } }, complete: function(XMLHttpRequest, textStatus){ }, error: function(){ alert("请求网络失败!。。。。。。"); } }); }
④前端完整代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ECharts</title> <!-- 引入 echarts.js --> <link rel="stylesheet" href="css/gongchang-style.css" /> <script type="text/javascript" src="js/jQuery.js"></script> <script src="js/echarts.js"></script> </head> <body onload="initdata()"> <div class="grid-wrap"> <div> <input type="text" id="nicheng" placeholder="搜索"> <input type="button" onclick="search()" value="搜索"> </div> <div class="grid" id="grid1"> <div class="grid-header" id="grid1"> <span class="row-1">姓名</span> <span class="row-1">年龄</span> <span class="row-1">性别</span> <span class="row-1">手机号码</span> <span class="row-1">居住地址</span> </div> <div class="grid-body"> <!-- <div class="grid-item"> <span class="row-1">zhangxing</span> <span class="row-1">24</span> <span class="row-1">男</span> <span class="row-1">18772351259</span> <span class="row-1">浙江西湖</span> </div> <div class="grid-item"> <span class="row-1">lisishan</span> <span class="row-1">23</span> <span class="row-1">女</span> <span class="row-1">17682317584</span> <span class="row-1">浙江余杭</span> </div> --> </div> </div> </div> <script type="text/javascript"> var name; var age; var sex; var phone; var address; /**初始函数 * [initdata description] * @return {[type]} [description] */ function initdata(){ alert("进来了"); $.ajax({ type: "get", url: "http://dajiu.ngrok.cc/userInfo/getUserInfo", success: function(data, textStatus){ alert(data.userInfoList[1].username); if(data.status == 1){ for (var i =0;i<data.userInfoList.length;i++) { name ="name"+i; age = "age"+i; sex = "sex"+i; phone ="phone"+i; address = "address"+i; $(".grid-body").append('<div class="grid-item">\ <span class="row-1" id="'+name+'">lisishan</span>\ <span class="row-1" id="'+age+'">23</span>\ <span class="row-1" id="'+sex+'">女</span>\ <span class="row-1" id="'+phone+'">17682317584</span>\ <span class="row-1" id="'+address+'">浙江余杭</span>\ </div>'); document.getElementById(name).innerHTML=data.userInfoList[i].username; document.getElementById(age).innerHTML=data.userInfoList[i].age; document.getElementById(sex).innerHTML=data.userInfoList[i].sex; document.getElementById(phone).innerHTML=data.userInfoList[i].phone; document.getElementById(address).innerHTML=data.userInfoList[i].address; } } }, complete: function(XMLHttpRequest, textStatus){ }, error: function(){ alert("请求网络失败!。。。。。。"); } }); } /**模糊搜索 * [search description] * @return {[type]} [description] */ function search(){ var nicheng =document.getElementById("nicheng").value; $('.grid-item').remove(); $.ajax({ type: "get", url: "http://dajiu.ngrok.cc/userInfo/getUserInfoByName?username="+nicheng, success: function(data, textStatus){ if(data.status == 1){ for (var j =0;j<data.userlist.length;j++) { name ="name"+j; age = "age"+j; sex = "sex"+j; phone ="phone"+j; address = "address"+j; $(".grid-body").append('<div class="grid-item">\ <span class="row-1" id="'+name+'"></span>\ <span class="row-1" id="'+age+'"></span>\ <span class="row-1" id="'+sex+'"></span>\ <span class="row-1" id="'+phone+'"></span>\ <span class="row-1" id="'+address+'"></span>\ </div>'); document.getElementById(name).innerHTML=data.userlist[j].username; document.getElementById(age).innerHTML=data.userlist[j].age; document.getElementById(sex).innerHTML=data.userlist[j].sex; document.getElementById(phone).innerHTML=data.userlist[j].phone; document.getElementById(address).innerHTML=data.userlist[j].address; } } }, complete: function(XMLHttpRequest, textStatus){ }, error: function(){ alert("请求网络失败!。。。。。。"); } }); } </script> </body> </html>
3.效果展示
①进行就开始加载initData()函数,得到全部用户信息
②在搜索框数据模糊关键词,然后搜索
创作不易,莫要白嫖,您的关注及点赞是对于我创作的最大动力与源泉。
-
TP5 where数组查询(模糊查询)(有多个查询条件)
2017-10-20 14:58:35有查询条件就查询, ...模糊查询 $where[] = ['title','like',"%".$sotitle."%"]; $map[] = ['name','like','think']; $map[] = ['status','=',1]; //时间查询 $wheret2[]= ['time','between',[...有查询条件就查询,
多个查询条件,只要有查询,就增加一个查询条件
一、TP5.1版本
模糊查询
$where[] = ['title','like',"%".$sotitle."%"]; $map[] = ['name','like','think']; $map[] = ['status','=',1]; //时间查询 $wheret2[]= ['time','between',[$datatime1,$datatime2]]; 注意: $where[] = ['exp',Db::raw("FIND_IN_SET($id,category)")];//category值为数字, 一但用到$where[]方式和where('type',1)不能同时存在一个语句中 下面这语句的其它条件全部失效 正确写: $where = "FIND_IN_SET($category_id,category)"; $crs=Db::name('product')->field('id,title')->where('type',1)->where('type_mold',1)->where('deleted',0)->whereLike('title',"%".$sotitle."%")->where($where)->select()
in查询
$where1 = [ ['role_id', 'in', '1,2,3'], ];
TP5.1.21 版本之后数组查询支持:
要达到这样子查询:
1、首先引用: use think\db\Where;
2、定义数组:$where = new Where;
3、就可以用了:$where['title'] = ['like', "%".$sotitle."%"];
->where('name','like',"%".$sotitle."%")
$cid_al=array(1) { [0] => string(3) "879" [1] => string(3) "878" } $where['class_id'] = ['in', '$cid_all']; $where['id'] = ['in', $cid_al];//或这样子 in可以直接这样子,$cid_all是一维数组 $wherer['class_id'] = $cidarr; 一样子效果:`class_id` IN (879,878) $where['title'] = ['like', '%php%']; $where['u.name|u.tel|u.real_name|u.nickname'] = ['like',"%".$keyword."%"]; $where['id'] = ['<>', $id]; $where['id'] = ['notin', $all_user_id];//不等于 $where['number'] = ['=', null];//等空值 where('','exp',Db::raw("FIND_IN_SET($pid,pc.pidarr)")) ->join('menu m','find_in_set(m.id,b.category)!=0') $where2 = "FIND_IN_SET($category,c.category)"; >where($where2) //值为数字 $id=419; $where[] = ['exp',Db::raw("FIND_IN_SET($id,category)")];//category值为数字,例子:419,415,414 //值为字符串 $id值等于dfd 要注意'引号 $where[] = ['exp',Db::raw("FIND_IN_SET('$id',category)")];//category值为数字,例子:'349/417/419','349/413/415','349/413/416' $where[]与$where['xx']不能同时存在
->where("tp.id='".$id."' and tp.deleted=0") Db::table('think_user') ->where('id > 0 AND name LIKE "thinkphp%"') ->select();
更多教程:https://blog.csdn.net/haibo0668/article/details/83754479
另一种方式:
if($sotitle){ if($sotype=="id"){ $where[$sotype] = $sotitle; }else{ $where = [ ['title', 'like', "%".$sotitle."%"], ]; } } $where['level'] = 1;
$rs1=Db::name('column')->where($where)->select();
数组与时间一起查询
$rst=Db::name('order')->where($datac)->where('time', '<', $nowtimg)->setField('state', 2);
// 查询有效期内的活动 Db::name('event') ->whereTime('start_time', '<=', time()) ->whereTime('end_time', '>=', time()) ->select();
时间查询另一个例子:
SELECT `id`,`starttime`,`endtime` FROM `edu_live_course` WHERE `pid` = 231 AND `level` = 2 AND ( starttime > "2018-11-22 18:24:11" or (starttime < "2018-11-22 18:24:11" and endtime > "2018-11-22 18:24:11") ) ORDER BY `starttime` ASC LIMIT 1
$ndate = date("Y-m-d H:i:s"); $rs_ccid=Db::name('live_course') ->field('id,starttime,endtime') ->where(['pid'=>$id,'level'=>2]) ->where('starttime > "'.$ndate.'" or (starttime < "'.$ndate.'" and endtime > "'.$ndate.'")') ->order('starttime', 'asc') ->find(); $ccid = $rs_ccid['id']; // echo Db::name('live_course')->getLastSql(); //dump($rs_ccid);
FIND_IN_SET用法:
if($role_id==3){//老师 //$where['p.teachers_id']=$uid; $where .="p.teachers_id = ".$uid; }else{//1教务/助教 2班主任 } if($category){ //$where2[] = ['exp',Db::raw("FIND_IN_SET('$category',p.category)")]; $where .= ($where?' and ':'')." FIND_IN_SET('$category',p.category)"; }
Db::name('menu')->where('FIND_IN_SET(:id,pid_all)',['id' => $id])->update([$field => $title]); ->join('menu m','find_in_set(m.id,b.category)!=0') 具体例子: if(count($allpid)>0){ $where1 = 'p.teachers_id='.$uid; //项目分类 if($category){ // dump($category);die; //$categoryarr = implode(",",$categoryarr); //dump($categoryarr);die; // $where2[] = ['exp',Db::raw("FIND_IN_SET($category,c.category)")]; $where2 = "FIND_IN_SET($category,c.category)"; //dump($where); } foreach($allpid as $key => $v){ $pid=$v['id']; $rs = Db::name('register_module_pro_city') ->alias('pc') ->field('c.id,c.title') ->join('register_module m','pc.module_id = m.id') ->join('register_exa_date ed','find_in_set(m.id,ed.module_id)!=0') ->join('register_class c','find_in_set(ed.id,c.exa_date_id)!=0') ->join('product p','find_in_set(p.id,pc.pidarr)!=0') ->where('','exp',Db::raw("FIND_IN_SET($pid,pc.pidarr)")) // ->where($where) ->where($where1) ->where($where2) ->where('ed.deleted',0) ->where('c.deleted',0) ->where('m.deleted',0) ->where('pc.deleted',0) ->where('p.deleted',0) ->select(); //echo Db::name('register_module_pro_city')->getLastSql(); if(count($rs)>0){ foreach($rs as $k => $v1){ $allcid[$k]['cid'] =$v1['id']; $allcid[$k]['title'] =$v1['title']; } } $pid=''; }
5.1的数组查询方式有所调整,是为了尽量避免数组方式的条件查询注入。
如果需要事先组装数组查询条件,可以使用:
$map[] = ['name','like','think']; $map[] = ['status','=',1];
官方文档:https://www.kancloud.cn/manual/thinkphp5_1/354006
注意,
V5.1.7+
版本数组方式如果使用exp
查询的话,一定要用raw
方法。Db::table('think_user') ->where([ ['name', 'like', 'thinkphp%'], ['title', 'like', '%thinkphp'], ['id', 'exp', Db::raw('>score')], ['status', '=', 1], ]) ->select();
数组查询方式,确保你的查询数组不能被用户提交数据控制,用户提交的表单数据应该是作为查询数组的一个元素传入,如下:
Db::table('think_user') ->where([ ['name', 'like', $name . '%'], ['title', 'like', '%' . $title], ['id', '>', $id], ['status', '=', $status], ]) ->select();
注意,相同的字段的多次查询条件可能会合并,如果希望某一个
where
方法里面的条件单独处理,可以使用下面的方式,避免被其它条件影响。$map = [ ['name', 'like', 'thinkphp%'], ['title', 'like', '%thinkphp'], ['id', '>', 0], ]; Db::table('think_user') ->where([ $map ]) ->where('status',1) ->select();
生成的SQL语句为:
SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' AND `id` > 0 ) AND `status` = '1'
如果使用下面的多个条件组合
$map1 = [ ['name', 'like', 'thinkphp%'], ['title', 'like', '%thinkphp'], ]; $map2 = [ ['name', 'like', 'kancloud%'], ['title', 'like', '%kancloud'], ]; Db::table('think_user') ->whereOr([ $map1, $map2 ]) ->select();
生成的SQL语句为:
SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' ) OR ( `name` LIKE 'kancloud%' AND `title` LIKE '%kancloud' )
善用多维数组查询,可以很方便的拼装出各种复杂的SQL语句
引用:https://www.kancloud.cn/manual/thinkphp5_1/354030
二、TP5.0版本
//类型 if($sotype){ $where['type'] = $sotype; } //合作单位 if($companyid){ $where['hezuodanwei'] = $companyid; } //关键词 模糊查询 $type 是变量 if($key){ $where[$type] = ['like',"%".$key."%"]; } $rs=Db::name('student')->where($where)->order('id desc')->limit($limit)->page($page)->select(); $rs1=Db::name('student')->where($where)->select();
查询一段时间的数据:
$where['time'] = array('between', array($starttime,$enttime));
$where['type'] = $sotype;
$where['hezuodanwei'] = $companyid;
$where["username"] = ['like',"%".$tag["kw"]."%"];//模糊查询
$where[]=['exp','FIND_IN_SET(2,needID)'];
例子:id in(1,5,8)
$where['hezuodanwei'] =array('in','10,12');
组成查询数组$where
where($where)
引用:http://blog.csdn.net/u010447573/article/details/47420063
Where 条件表达式格式为:
$map['字段名'] = array('表达式', '操作条件');
其中 $map 是一个普通的数组变量,可以根据自己需求而命名。上述格式中的表达式实际是运算符的意义:
ThinkPHP运算符 与 SQL运算符 对照表 TP运算符 SQL运算符 例子 实际查询条件 eq = $map['id'] = array('eq',100); 等效于:$map['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 like like $map<'username'> = array('like','Admin%'); username like 'Admin%' between between and $map['id'] = array('between','1,8'); id BETWEEN 1 AND 8 not between not between and $map['id'] = array('not between','1,8'); id NOT BETWEEN 1 AND 8 in in $map['id'] = array('in','1,5,8'); id in(1,5,8) not in not in $map['id'] = array('not in','1,5,8'); id not in(1,5,8) and(默认) and $map['id'] = array(array('gt',1),array('lt',10)); (id > 1) AND (id < 10) or or $map['id'] = array(array('gt',3),array('lt',10), 'or'); (id > 3) OR (id < 10) xor(异或) xor 两个输入中只有一个是true时,结果为true,否则为false,例子略。 1 xor 1 = 0 exp 综合表达式 $map['id'] = array('exp','in(1,3,8)'); $map['id'] = array('in','1,3,8'); 补充说明
- 同 SQL 一样,ThinkPHP运算符不区分大小写,eq 与 EQ 一样。
- between、 in 条件支持字符串或者数组,即下面两种写法是等效的:
$map['id'] = array('not in','1,5,8'); $map['id'] = array('not in',array('1','5','8'));
exp 表达式
上表中的 exp 不是一个运算符,而是一个综合表达式以支持更复杂的条件设置。exp 的操作条件不会被当成字符串,可以使用任何 SQL 支持的语法,包括使用函数和字段名称。
exp 不仅用于 where 条件,也可以用于数据更新,如:
$Dao = M("Article"); // 构建 save 的数据数组,文章点击数+1 $data['id'] = 10; $data['counter'] = array('exp','counter+1'); // 根据条件保存修改的数据 $User->save($data);
官方查询语法:https://www.kancloud.cn/manual/thinkphp5/135182
查询表达式
版本 新增功能 5.0.9 比较运算增加闭包子查询支持 5.0.4 支持对同一个字段多次调用查询方法 查询表达式支持大部分的SQL查询语法,也是
ThinkPHP
查询语言的精髓,查询表达式的使用格式:where('字段名','表达式','查询条件'); whereOr('字段名','表达式','查询条件');
表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:
表达式 含义 EQ、= 等于(=) NEQ、<> 不等于(<>) GT、> 大于(>) EGT、>= 大于等于(>=) LT、< 小于(<) ELT、<= 小于等于(<=) LIKE 模糊查询 [NOT] BETWEEN (不在)区间查询 [NOT] IN (不在)IN 查询 [NOT] NULL 查询字段是否(不)是NULL [NOT] EXISTS EXISTS查询 EXP 表达式查询,支持SQL语法 > time 时间比较 < time 时间比较 between time 时间比较 notbetween time 时间比较 表达式查询的用法示例如下:
EQ :等于(=)
例如:
where('id','eq',100); where('id','=',100);
和下面的查询等效
where('id',100);
表示的查询条件就是
id = 100
NEQ: 不等于(<>)
例如:
where('id','neq',100); where('id','<>',100);
表示的查询条件就是
id <> 100
GT:大于(>)
例如:
where('id','gt',100); where('id','>',100);
表示的查询条件就是
id > 100
EGT:大于等于(>=)
例如:
where('id','egt',100); where('id','>=',100);
表示的查询条件就是
id >= 100
LT:小于(<)
例如:
where('id','lt',100); where('id','<',100);
表示的查询条件就是
id < 100
ELT: 小于等于(<=)
例如:
where('id','elt',100); where('id','<=',100);
表示的查询条件就是
id <= 100
[NOT] LIKE: 同sql的LIKE
例如:
where('name','like','thinkphp%');
查询条件就变成
name like 'thinkphp%'
V5.0.5+
版本开始,like查询支持使用数组where('name','like',['%think','php%'],'OR');
[NOT] BETWEEN :同sql的[not] between
查询条件支持字符串或者数组,例如:
where('id','between','1,8');
和下面的等效:
where('id','between',[1,8]);
查询条件就变成
id BETWEEN 1 AND 8
[NOT] IN: 同sql的[not] in
查询条件支持字符串或者数组,例如:
where('id','not in','1,5,8');
和下面的等效:
where('id','not in',[1,5,8]);
查询条件就变成
id NOT IN (1,5, 8)
[NOT] IN
查询支持使用闭包方式[NOT] NULL :
查询字段是否(不)是
Null
,例如:where('name', null); where('title','null'); where('name','not null');
如果你需要查询一个字段的值为字符串
null
或者not null
,应该使用:where('title','=', 'null'); where('name','=', 'not null');
EXP:表达式
支持更复杂的查询情况 例如:
where('id','in','1,3,8');
可以改成:
where('id','exp',' IN (1,3,8) ');
exp
查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,包括使用函数和字段名称。 -
mysql之模糊查询的方法
2018-07-20 14:47:01想起Mysql模糊查询正常情况下我们想到的一般都是like,但是使用like,格式正确了效率很快,当然这是在数据量比较小的情况下,问题是在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时mysql...Mysql模糊查询正常情况下在数据量小的时候,速度还是可以的,但是不容易看出查询的效率,在数据量达到百万级,千万级的甚至亿级时 mysql查询的效率是很关键的,也是很重要的。
一、一般情况下 like 模糊查询的写法:前后模糊匹配
这个SQL语句,如果用explain解释的话,我们很容易就能发觉它是没有走索引搜索,而是对全表进行了扫描,这显然是很慢的,还有卡库的可能。
如果将上面的SQL语句改成下面的写法:
就是把‘keyword’前面的%去掉了,这样的写法用explain解释看到,SQL语句使用了索引,这样就可以大大的提高查询的效率。
有时候,我们在做模糊查询的时候,并非要想查询的关键词都在开头,所以如果不是特别的要求,"keywork%"并不合适所有的模糊查询。
二、模糊查询高效的方法:
1、LOCATE('substr',str,pos)方法
解释:返回 substr 在 str 中第一次出现的位置,如果 substr 在 str 中不存在,返回值为 0 。如果pos存在,返回 substr 在 str 第pos个位置后第一次出现的位置,如果 substr 在 str 中不存在,返回值为0。
实例:
备注:keyword是要搜索的内容,business为被匹配的字段,查询出所有存在keyword的数据
2、POSITION('substr' IN `field`)方法
其实我们就可以把这个方法当做是locate()方法的别名,因为它和locate()方法的作用是一样的。
实例:
3、INSTR(`str`,'substr')方法
格式:
实例:
除了上述的方法外,还有一个函数FIND_IN_SET,这个方法比较特殊,他所查询的必须要是以“,”分隔开。
4、FIND_IN_SET(str1,str2):
返回str2中str1所在的位置索引,其中str2必须以","分割开。
格式:
实例:
-
JSP实现模糊查询
2019-11-23 14:56:08模糊查询 -
mybatis中LIKE模糊查询的几种写法以及注意点
2018-08-20 19:42:58mybatis中对于使用like来进行模糊查询的几种方式: (1)使用${...} 注意:由于$是参数直接注入的,导致这种写法,大括号里面不能注明jdbcType,不然会报错 org.mybatis.spring.MyBatisSystemException: ... -
模糊查询:Spring Data JPA 如何进行模糊查询(LIKE) ?
2018-01-22 17:56:28Spring MVC +Spring Data JPA+模糊查询 为了方便起见,service直接忽略,方便理解。 一. 方法一 1. Controller层: 方法参数如下,一定要加 "%"+name+"%" /** * @description: * @author: czx<... -
MongoDB模糊查询
2018-05-29 15:00:082016年05月04日 14:44:24阅读数:24254模糊查询简介MongoDB查询条件可以使用正则表达式,从而实现模糊查询的功能。模糊查询可以使用$regex操作符或直接使用正则表达式对象。MySQLMongoDBselect * from student where... -
Linq的模糊查询(包含精确模糊查询)
2019-05-23 11:10:22目录: 1.判断是否为空或者null 2.普通包含模糊查询 1)以某字符串开头的模糊查询 2)以某字符串结尾的模糊查询 3)包含某字符串的模糊查询 ...不错这也是linq模糊查询的精髓,一般的模糊查询... -
Java 模糊查询
2019-06-17 20:17:50在学习Java 这门语言过程...在很多时候我们会用到模糊查询,这里是我在编码过程中用到的模糊查询。 JSP : <input value="${athenticationname}"id="athenticationname" type="text" class="text_add" style=" w... -
mybatis批量模糊查询、多选模糊查询
2019-08-16 16:14:00先要知道如何进行模糊查询,在原有的基础上进行修改,一般都在mysql上写好SQL语句,再换至mybatis里拼写 模糊查询如下: SELECT * FROM `order` WHERE `id` LIKE CONCAT('%','Check','%'); 表:order 字段:id ... -
mysql 模糊查询 concat()
2017-02-08 10:27:43concat() 函数,是用来连接字符串。...模糊查询; select * from user where name like “%zhang%”在实际的使用中,条件是作为参数传递进来的。 所以我们使用 concat() 函数 mybatis: select * from user wh -
Kibana 模糊查询
2019-02-26 00:18:42FuzzyQuery(模糊查询) 使用~(esc下方按钮中文输入法下的按键)作为模糊查询的标识 录入查询参数:name:lis~ 录入查询参数:name:lis~1 录入查询参数:name:lis~2 录入查询参数:name:lis~3 划重点... -
模糊查询和排序查询
2019-05-17 23:02:33模糊查询 1._:表示任意一位字符 2.%:表示任意位数的任意字符 3.要实现模糊查询需要使用到关键字“LIKE” 基本语法: 3→SELECT * 1→FROM 数据来源 2→WHERE 模糊查询的字段 LIKE 模糊查询的关键字 注意... -
MySQL模糊查询用法大全(正则、通配符、内置函数等)
2020-05-28 22:29:51在日常使用MySQL进行模糊匹配时,我们通常用通配符%来进行匹配,其实,这只是MySQL模糊匹配的冰山一角,在MySQL中,...好了,今天让我带大家一起掀起MySQL的小裙子,看一看模糊查询下面还藏着多少鲜为人知的好东西。 -
ES查询模糊查询
2019-09-11 17:31:211、前缀查询(prefix) 2、wildcard模糊查询,字段类型,定义为keyword,不进行分词 { "query": { "bool": { "must": [ { "wildcard": { ... -
MySQL模糊查询
2019-07-06 18:16:01数据库查询时,分为精确查询和模糊查询,但是在某些查询,如商品搜索中,精确查询可能查询不到或者类似商品无法搜索到商品,我们往往也记不清商品的全名,此时就需要用到模糊查询了。 一般的模糊查询的SQL语句如下:... -
MySQL - 如何优化模糊查询(like 模糊查询)
2019-08-04 23:15:50在MySQL中,模糊查询肯定要使用like关键字,然后在加 %%,是代表前模糊还是后模糊。数据量小的情况下,不容易看出查询的效率,但是数据量达到百万级,千万级甚至更高的时候,查询的效率就很容易显现出来了,此时,... -
MySql 模糊查询
2018-01-17 14:06:39SQL 模糊查询 在进行数据库查询时,有完整查询和模糊查询之分。 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式... -
InfluxDB 模糊查询
2019-12-26 10:17:48InfluxDB模糊查询 通过正则表达式的方式查询 正则表达式点击教程 以【模糊条件】开头的查询方式 SELECT * FROM "tablename" where column =~ /^模糊条件/ limit 1000 以【模糊条件】结尾的查询方式 SELECT * ... -
mysql进阶(六)模糊查询的四种用法介绍
2015-07-25 17:43:04mysql中模糊查询的四种用法介绍 这篇文章主要介绍了mysql中模糊查询的四种用法,需要的朋友可以参考下。 下面介绍mysql中模糊查询的四种用法: 1,%: 表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况... -
Layui模糊查询
2019-06-30 23:58:38Layui超实用10篇技术解决方案 ... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 一、模糊查询条件 <form class="layui-form" action=""> <label class="layui... -
PostgreSQL - 模糊查询
2019-02-28 23:44:29like、not like在SQL中用于模糊查询,%表示任意个字符,_表示单个任意字符,如果需要在模糊查询中查询这两个通配符,需要用ESCAPE进行转义,如下: select * from table where name like '张/_小%' escape '/'; ...
-
信息安全风险评估解析.pdf
-
MySQL 性能优化(思路拓展及实操)
-
数据结构实践准备
-
文件操作所需Jar.zip
-
信息安全风险评估培训教材.ppt
-
LQ 方案 .pdf
-
友邦.rar电气设备选型资料大全 (适合刚刚入行的电气工程师对设备进行选型规划)详解
-
1997~2018县市社会经济主要指标.rar
-
朱老师鸿蒙系列课程第1期-2鸿蒙系统Harmonyos源码架构分析
-
51单片机交通灯设计.rar
-
Java第十五课:数组
-
三级网络技术知识点小礼包.pdf
-
伊顿穆勒.rar电气设备选型资料大全 (适合刚刚入行的电气工程师对设备进行选型规划)详解 报价
-
2021-03-02
-
PAT甲级-排序类型-1016 Phone Bills解题思路
-
PHPWAMP集成环境Zend组件的相关介绍,环境默认的PHP运行模式
-
【六、wordpress优化之一:优化简介及优化前后结果】2021最详细wordpress博客建站教程(2021.03.01更新)
-
【ACWing】1023. 买书
-
华为1+X——网络系统建设与运维(高级)
-
在Golang中获取DNS记录