解密PHP模糊查询技术

慕课网解密PHP模糊查询技术学习笔记!

对于以前知识的巩固,可以跳跃式选择性观看!

/**
 *解密PHP模糊查询技术
 *
 *本节课程是PHP模糊查询技术专题视频之课程引入
 *大纲:
 *    模糊查询的实用性,应用场景;站内搜索技术;
 *
 *
 *PHP用户查询器 案例演示
 *(关键字高亮技术)
 *
 *程序流程:
 *客户端提交关键词,
 *程序端获取关键词,通过PHP模糊查询技术到用户信息库查询相关用户,
 *将查询结果返回到客户端。
 *
 *课程目标:
 *1掌握PHP模糊查询技术的应用
 *2独立完成站内新闻搜索功能
 *3多关键词模糊查询
 *
 *
 *第二节视频:基础数据的建立
 *
 *用户编号、用户姓名、登录密码、性别、其他的
 *
CREATE TABLE `user`(
`uid` int(10) AUTO_INCREMENT PRIMARY KEY COMMENT ‘用户id‘,
`username` varchar(30) NOT NULL DEFAULT ‘‘ COMMENT ‘用户名‘,
`password` varchar(6) NOT NULL DEFAULT ‘‘ COMMENT ‘密码‘,
`sex` char(2) NOT NULL DEFAULT ‘保密‘ COMMENT ‘性别‘,
`email` varchar(40) NOT NULL DEFAULT ‘‘ COMMENT ‘邮箱‘,
`hobby` varchar(255) NOT NULL DEFAULT ‘‘ COMMENT ‘兴趣爱好‘,
KEY `username`(`username`)
)ENGINE = MyISAM DEFAULT CHARSET = UTF8 COMMENT = ‘用户表‘;
 *
 *建立索引:
 *数据量很小体现不出来;
 *如果按照某个条件去检索数据,
 *如果这个条件字段没有建立索引,查询的时候就是遍历整张表,
 *如果建立了索引,查询的时候就会根据索引来查询,进而提高查询性能
 *插入一些数据
 *
INSERT INTO user
values
(null,‘apple‘,‘123321‘,‘男‘,‘[email protected]‘,‘篮球‘),
(null,‘orange‘,‘463546‘,‘男‘,‘[email protected]‘,‘足球‘),
(null,‘pea‘,‘5465‘,‘女‘,‘[email protected]‘,‘乒乓球‘),
(null,‘bananer‘,‘87957‘,‘女‘,‘[email protected]‘,‘排球‘),
(null,‘coco‘,‘1254‘,‘男‘,‘[email protected]‘,‘冰球‘),
(null,‘hello‘,‘7542‘,‘女‘,‘[email protected]‘,‘羽毛球‘),
(null,‘hair‘,‘345464‘,‘男‘,‘[email protected]‘,‘溜溜球‘),
(null,‘lucy‘,‘341545‘,‘男‘,‘[email protected]‘,‘橄榄球‘),
(null,‘hanmeimei‘,‘57653‘,‘女‘,‘[email protected]‘,‘台球‘),
(null,‘lilei‘,‘353535‘,‘男‘,‘[email protected]‘,‘皮球‘),
(null,‘zhangsan‘,‘976854‘,‘女‘,‘[email protected]‘,‘气球‘);
 *
 *查询语法入门:精确查询、模糊查询
 *
 *返回结果有且只有一条的SQL查询是精确查询
 *应用场景:
 *用户注册登录,用户注册时判断用户名是否已经注册,登录的时候查询账号密码
 *单挑数据的更新
 *
 *模糊查询返回的结果是不确定的
 *应用场景:
 *站内搜索。
 *
 *以上两种查询返回的结果都有可能为空
 *
 *语法的入门
 *MySQL模糊查询语法支持两种匹配格式
 *1.SQL匹配模式(开发中应用最多的一种)
 *2.正则表达式匹配模式(不推荐)
 *
 *SQL匹配模式:
 *1.使用SQL匹配模式,不用使用操作符=或者!=,
 *而是用操作符LIKE或者NOT LIKE
 *2。使用SQL匹配模式,MySQL提供了两种通配符。
 *% 表示任意数量的任意字符(包括0个)
 *_ 表示任意单个字符
 *3.使用SQL匹配模式,如果匹配格式中不包含以上两种通配符中的任意一个,
 *其查询效果等同于=或者!=。
 *4.使用SQL匹配模式,默认情况下是不区分大小写的。
 *
 *
 *
 *两种通配符的使用
 *查询用户名已某个字符开头的用户
 *
SELECT * FROM user WHERE username LIKE ‘0%‘ ;
 *查询用户名已某个字符结尾的用户
SELECT * FROM user WHERE username LIKE ‘%o‘ ;
 *查询用户名包含某个字符的用户
SELECT * FROM user WHERE username LIKE ‘%o%‘ ;
 *
 *查询用户名长度为三的用户
SELECT * FROM user WHERE username LIKE ‘____‘ ;
 *
 *查询用户名第二个字符为o的用户
SELECT * FROM user WHERE username LIKE ‘_o%‘ ;
 *
 *
 *
 *
 *正则表达式匹配模式
 * . 匹配任意单个字符
 * * 匹配0个或者多个在它前面的字符
 *        X* 表示任意数量的X字符
 * [..] 匹配中括号中的任意字符
 *        [abc]匹配字符a或b或c
 *        [a-z]匹配任意字母
 *        [0-9]任何数字
 *        [0-9]*匹配任何数量的任何数字
 *    ^ 表示以某个字付或者字符串开头
 *        ^a表示已字母a开头
 *    % 表示已某个字符或者字符串结尾
 *        s$表示以字母s结尾
 *
 *使用正则表达式匹配模式使用操作符是
 *REGEXP或NOT REGEXP(RLIKE 或 NOT RLIKE)
 *
 *如果使用一个正则表达式来匹配,其模式有别于SQL模式
 *
 *查询用户名以字符l开头的用户
 SQL匹配模式 l%
 正则表达式 ^1
 SELECT * FROM user WHERE username REGEXP ‘^l‘
 *
 *查询用户名正好是4个字符的用户
 SQL匹配模式 ____
 正则表达式 ....
 SELECT * FROM user WHERE username REGEXP ‘....‘
 所有的用户名四个以及四个以上字符的用户都查询出来的!!!!!

正则表达式匹配模式,其正则表达式出现在匹配字段的任意位置,其模式就算匹配了。

注意:如果仅用通配符 . 来匹配,匹配模式表示大于等于N个字符;
 这样就可以了:
 SELECT * FROM user WHERE username REGEXP ‘^.....$‘
 *
 *
 *
 *PHP模糊查询技术案例开发;
 *获取关键词
 *实现用户信息检索
 *关键词高亮:技术点是利用PHP的字符串替换功能;
 在遍历的时候,对用户名关键字进行高亮
 while($row = mysql_fetch_assoc($res)){
    $row[‘username‘] = str_replace($keyword,‘<font color="red"‘.$keywords.‘</font>‘,$row[‘username‘]);
    $user[]=$row;
 }
 *
 *基础作业:开发一个站内新闻搜索功能(根据哟过户输入的标题查询相关新闻)
 *扩展作业,站内新闻搜索功能(用户可以输入多个关键词进行搜索,多个关键词以空格或者逗号隔开)
 *
 *
 *
 *FULLTEXT全文索引
 *数据量巨大的时候,百万级以上;
 *
 *全文索引在绝大部分的网站中是不会使用的;
 *数据量巨大,百万以上的时候,用PHP的模糊查询技术Like效率是比较低的,而且也比较耗费性能;
 *
 *使用时注意:
 *1)MySQL使用全文搜索功能,数据表引擎必须是MyISAM;
 *2)MySQL全文搜索功能不支持中文,如果需要支持中文需要通过特殊的处理;
 *
 *
 *
 *     
 *
 */

时间: 2024-12-09 22:13:09

解密PHP模糊查询技术的相关文章

SQL 模糊查询技术

模糊查询是很常见很实用的查询技巧,对于初学者需要掌握 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来. 另外,

对慕课网 -- php模糊查询技术 的学习

①.针对数据库的设计 密码如果是md5的话,就用char(32),如果是存一半的数据的话,就用char. 性别,正常的开发是用int的. 输入条件,有default设置默认值 key 表示添加索引,对指定字段简历一个索引 索引的好处:如果按照某一个条件去检索数据,如果没有这个条件字段没有建立索引,查询的时候是会遍历整张表,如果你建立了索引,查询的时候就会索引来查询,进而提高查询性能. ②.sql匹配模式注意事项 1.使用sql匹配模式,不能使用操作符=或!= 而是使用操作符like或not li

mysql笔记十——数据库分页技术(再分页,模糊查询)

1.什么是数据分页:数据分页就是将很多条记录像书本一样分页,每页显示多少行记录: 2.为什么要数据分页:当我们进行sql语句查询时,假如数据有成千上万行记录,如果在同一个页面去显示,那这个页面得有多大,数据就要很多,而我们所需的记录又很少,不使用分页,查看起来那么繁琐,而且一不小心容易看着眼花.使用数据分页,就行书本一样,有页数,一目了然.相当简洁. 3.核心sql语句:SELECT * FROM stud LIMIT m,n ----m表示要显示的页数,n表示显示的记录行数 4.核心思想: 总

10 行 Python 代码实现模糊查询/智能提示

10 行 Python 代码实现模糊查询/智能提示 1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的文件名,并提供一个推荐列表供用户选择. 样例如下: Vim (Ctrl-P) Sublime Text (Cmd-P) '模糊匹配'这是一个极为有用的特性,同时也非常易于实现. 2.问题分析: 我们有一堆字符串(文件名)集合,我们根据用户的输入不断进行过滤,用户的输入可能是字符串的一部分.我们就以下面的

51CTO论坛搜索升级,支持模糊查询 2017.6.14

51CTO论坛搜索进行升级,使用新搜索算法,支持模糊查询,更容易查找到相关帖子.目前的结果切换到so.51cto.com,欢迎大家体验.在论坛首页顶部搜索框搜索已经支持最新搜索技术,后续会在版块页.帖子页的搜索也使用新搜索技术.2017.6.14 过去的论坛搜索,是在论坛数据库搜索,一方面搜索需要等待时间长,点击一次才能进入,另一方面搜索不支持模糊查询,经常找不到搜索结果. 这次搜索的升级切换,也依然可能有问题,欢迎大家留言说说自己的体验和问题,后面我们还会继续优化搜索算法,提升搜索体验.

Oracle 模糊查询方法

在这个信息量剧增的时代,如何帮助用户从海量数据中检索到想要的数据,模糊查询是必不可少的.那么在Oracle中模糊查询是如何实现的呢? 一.我们可以在where子句中使用like关键字来达到Oracle模糊查询的效果:在Where子句中,可以对datetime.char.varchar字段类型的列用Like关键字配合通配符来实现模糊查询,以下是可使用的通配符: (1)% :零或者多个字符,使用%有三种情况 字段 like '%关键字%'字段包含"关键字"的记录 字段 like '关键字%

利用cookie存放模糊查询的信息

将前台传入后台的查询条件,存放到cookie中,并加入响应对象中,将该查询条件存放入浏览器端.(会话cookie,存放在浏览器的内存中,浏览器关闭,cookie消失.[不设置路径,和生命周期]) 注意点:(1)在往cookie信息中存放中文的时候,需要考虑编码问题! (2)从cookie对象中取出信息,也要注意编码,存放时进行特殊编码,那么取值时,也要进行特殊解码 /**     * 将查询条件存放入cookie中     */    @Override    public void saveS

[原创]java WEB学习笔记23:MVC案例完整实践(part 4)---模糊查询的设计与实现

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

模糊查询于聚合函数

通配符: _  单个字符 %任意字符 []范围内的字符 [^]范围外的字符 SELECT * FROM StudentUPDATE Student SET StudentName='王波' WHERE StudentNo='Y21003011' --模糊查询:查询学生表中姓'冯'的学生记录SELECT * FROM Student WHERE StudentName LIKE '王_'SELECT * FROM Result WHERE SubjectId LIKE '[1-9]'SELECT