易怀源

导航

解密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全文搜索功能不支持中文,如果需要支持中文需要通过特殊的处理;
 *
 *
 *
 *     
 *
 */

posted on 2016-06-02 17:57  易怀源  阅读(1260)  评论(0编辑  收藏  举报