thinkphp---模糊查询详解
最近做项目,在做搜索模块的时候,模糊查询肯定少不了。
今天就详细的看一下模糊查询:
$where['title'] = array('like','%'.$words.'%');
$where['title'] = array('like',array('%'.$words.'%','%'.$wordss.'%'));
$where['title'] = array(array('like','%'.$words.'%'),array('like','%'.$wordss.'%'));
一、当个字段做模糊查询。
$words = "吃";
$where['title'] = array('like','%'.$words.'%');
$list = $TagDB->where($where)->select();
这样执行的Sql是:
SELECT * FROM `tp_keywords_sanqi` WHERE `title` LIKE '%吃%'
这个可以查询多个字段:
$where['title'] = array('like','%'.$words.'%');
$where['description'] = array('like','%'.$words.'%');
$list = $TagDB->where($where)->select();
上面的坏处:很多时候,我们做的是标题 title的查询,而且查询的时候,要求包含 title 包含两个或者以上的词:
例如:
要求一:查询标题包含 “作用” 或 “怎样” ;
$words = "怎样";
$wordss = "作用";
$where['title'] = array('like',array('%'.$words.'%','%'.$wordss.'%'));
$list = $TagDB->where($where)->select();
执行的Sql是这样的:
SELECT * FROM `tp_keywords_sanqi` WHERE (`title` LIKE '%怎样%' OR `title` LIKE '%作用%')
要求二:查询标题中同时包含 “作用” 和 ”怎样“ ;
$words = "怎样";
$wordss = "作用";
$where['title'] = array(array('like','%'.$words.'%'),array('like','%'.$wordss.'%'));
$list = $TagDB->where($where)->select();
执行的sql是这样的:
SELECT * FROM `tp_keywords_sanqi` WHERE ( `title` LIKE '%怎样%' AND `title` LIKE '%作用%' )
当然啦!还可以自己写Sql来执行:
$sql = "SELECT * FROM `tp_keywords_sanqi` WHERE `title` LIKE '%什么%';";
$sql = "SELECT * FROM `tp_keywords_sanqi` WHERE (`title` LIKE '%什么%') OR (`title` LIKE '%吃%');";
$sql = "SELECT * FROM `tp_keywords_sanqi` WHERE (`title` LIKE '%什么%' AND `title` LIKE '%作用%')";
$list = M()->query($sql);
具体示例:
$words = "作用 功效";
$where = array();
$wordsArr = explode(' ',$words);
$whereArr = array();
foreach($wordsArr as $k=>$v){
$arr = array();
if(!$v)unset($wordsArr[$k]);
array_push($arr,'like');
array_push($arr,'%'.$v.'%');
array_push($whereArr,$arr);
}
$where['title'] = $whereArr;
$list = $TagDB->where($where)->select();
echo $TagDB->getLastSql();
执行的Sql:
SELECT * FROM `tp_keywords_sanqi` WHERE ( `title` LIKE '%作用%' AND `title` LIKE '%功效%' )
目的达到!
thinkphp---模糊查询详解的更多相关文章
- ThinkPHP视图查询详解
ThinkPHP视图查询详解 参考http://www.jb51.net/article/51674.htm 这篇文章主要介绍了ThinkPHP视图查询,需要的朋友可以参考下 ThinkP ...
- Mybatis-生成逆向工程后对数据库的模糊查询详解
MyBatis-使用逆向工程中方法进行模糊查询 1.应用mybatis逆向工程会大大的提高我们的开发效率,如何应用mabatis 逆向生成的代码进行模糊查询那. 2.首先看一下pojo 层中examp ...
- Lucene系列六:Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)
一.搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字.对关键字进行分词.根据分词结果去索引库里面找到对应的文章id.根据文章id找到对应的文章 2. L ...
- ElasticSearch第四步-查询详解
ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...
- Solr安装入门、查询详解
Solr安装入门:http://www.importnew.com/12607.html 查询详解:http://www.360doc.com/content/14/0306/18/203871_35 ...
- MySQL简单查询详解-单表查询
MySQL简单查询详解-单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询的执行路径 一条SQL查询语句的执行过程大致如下图所示: 1>.客户端和服务端通过my ...
- (转)Mysql 多表查询详解
MySQL 多表查询详解 一.前言 二.示例 三.注意事项 一.前言 上篇讲到mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有 ...
- 分享知识-快乐自己:Hibernate 中Criteria Query查询详解
1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Cr ...
- Mysql高手系列 - 第12篇:子查询详解
这是Mysql系列第12篇. 环境:mysql5.7.25,cmd命令中进行演示. 本章节非常重要. 子查询 出现在select语句中的select语句,称为子查询或内查询. 外部的select查询语 ...
- Solr查询详解
前言:上节是关于Solr的开发准备工作:.NET开发过程中的全文索引使用技巧之Solr(http://www.cnblogs.com/johnwood/p/3447242.html) 这节重点是讲So ...
随机推荐
- 研究jenkins集成unittest成图
jenkins搭建完毕,unittest代码编写完毕,触发unittest执行测试的脚本和任务编写完毕,接下来研究生成的结果在页面的可视化. 方案: highcharts 参考资料: http://b ...
- mysql add foreign key 不成功
今天修改了mysql数据表的结构,然后添加外键index一直不成功: 查到问题在于,被外键的表,引擎不是Innodb,而是MyISAM. 修改好,以后保存报错: 解决办法,将数据库表里的数据全部删除, ...
- VC++调用MSFlexGrid的SetRow方法,出现异常“Invalid Row Value”
MSFlexGrid是微软提供的网格表格控件,SetRow方法用于设置当前焦点所在行. C++ Code 12345 void CMSFlexGrid::SetRow(long nNewVal ...
- phpcms v9模板制作教程(转载)
第一节 1.首先下载phpcms v9的集成安装包并安装,这里就不详细说明了. 2.本地调试建议大家使用APMserver,或者wampserver等,可以到PHPCMS吧官方网站首页链接下载.安装好 ...
- linux中date命令显示昨天的日期信息?以特定格式显示时间?
需求描述: linux环境中,在使用date命令的时候,可以通过-d指定日期的字符串来显示日期 操作过程: 1.通过date显示昨天的日期 [root@redhat6 ~]# date -d 'yes ...
- SVN的Hooks功能--强制添加注释
所谓hooks,可以类似 理解Linux内核Netfilter框架的hook点和hook函数的概念.当用户在维护代码的过程中,其执行的相关动作正好触发了相关hook点,就 会去执行对应hook点的脚本 ...
- windows命令行下用netsh实现端口转发(端口映射)
微软Windows的netsh是一个命令行脚本实用工具.使用netsh工具 ,可以查看或更改本地计算机或远程计算机的网络配置.不仅可以在本地计算机上运行这些命令,而且可以在网络上的远程计算机上运行. ...
- linux实现开机自启动脚本
Linux下(以RedHat为范本)添加开机自启动脚本有两种方法,先来简单的; 一.在/etc/rc.local中添加如果不想将脚本粘来粘去,或创建链接什么的,则:step1. 先修改好脚本,使其所有 ...
- N76E003的学习之路(一)
N76E003是8051内核的一款单片机MCU,它提供丰富的特殊功能模块,包括: 1KRAM其中包括256字节SRAM,768字节XRAM. 最多可达18个标准管脚. 两组标准16位定时器/计数器:定 ...
- 《转载》IntelliJ 2016.2 IDEA 中进行 Java Web 项目开发配置
本文转载自 https://segmentfault.com/a/1190000007088964 1. 新建一个 Web Application 项目 打开 IntelliJ,选择新建项目: 左边栏 ...