解密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','男','4353@qq.com','篮球'),
(null,'orange','463546','男','345435345@qq.com','足球'),
(null,'pea','5465','女','313556@qq.com','乒乓球'),
(null,'bananer','87957','女','7657626@qq.com','排球'),
(null,'coco','1254','男','968756@qq.com','冰球'),
(null,'hello','7542','女','1435345@qq.com','羽毛球'),
(null,'hair','345464','男','5464657@qq.com','溜溜球'),
(null,'lucy','341545','男','78768@qq.com','橄榄球'),
(null,'hanmeimei','57653','女','455635@qq.com','台球'),
(null,'lilei','353535','男','464234@qq.com','皮球'),
(null,'zhangsan','976854','女','156656@qq.com','气球');
*
*查询语法入门:精确查询、模糊查询
*
*返回结果有且只有一条的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全文搜索功能不支持中文,如果需要支持中文需要通过特殊的处理;
*
*
*
*
*
*/