登陆注册
19122000000013

第13章 常规的数据库搜索(3)

stmt.close();

}

catch(SQLException ex)

{

out.print(ex.getMessage());

}

}

if(conn!=null)

{

try

{

conn.close();

}

catch(SQLException ex)

{

out.print(ex.getMessage());

}

}

}

%>

</body>

</html>

3.5使用PHP实现常规的数据库搜索

这一节的案例演示了基于数据库的常规搜索,使用PHP5.1.4技术,MySQL5.0.19数据库中服务器。

这里,新建一个测试数据库,名为tianen,其中含有一个表格,名为test。可以通过在MySQL命令行程序中运行下面的脚本来实现建立数据库和添加测试数据。

案例名称:建立测试数据库

程序名称:tianen.sql

create database tianen;

use tianen;

create table test

id int auto increment primary key,

title varchar(50),

content varchar(5000),

common varchar(50)

);

insert into test(title,content,common)values("祖国的名字","我们的祖国叫中国","中国");

insert into test(title,content,common)values("祖国的历史","我们的祖国有上下五千年的悠久历史","悠久古老");

insert into test(title,content,common)values("祖国的文明","我们的祖国有灿烂的文明","灿烂");

insert into test(title,content,common)values("祖国的人民","我们的祖国有十几亿勤劳的人民","勤劳");

insert into test(title,content,common)values("祖国的未来","祖国的未来,在手中","未来");

3.5.1使用PHP实现精确搜索

案例名称:精确搜索

程序名称:exact.php

<?php

echo"<table border=2bordercolor=red>";

$ connect=@ mysql connect("localhost","root","tianen");//连接数据库服务器

if(!$ connect)//验证连接是否成功

{

echo"wrong.";

exit;

}

mysql select db("tianen",$ connect);//选择数据库

$ query="select*from test where id=1";//构造sql选择语句

$ result=mysql query($ query);//执行sql语句,将结果赋予$ result

$ rows=@ mysql num rows($ result);//返回记录数目

for($ i=0;$ i<$ rows;$ i++)//遍历记录

{

@ mysql data seek($ result,$ i);//定位记录

$ data=@ mysql fetch array($ result);//获得记录数组$ data

$ id=$ data[0];//获得相应字段值

$ title=$ data[1];

$ content=$ data[2];

$ common=$ data[3];

echo"<tr><td>".$ id."</td><td>".$ title."</td><td>".$ content."</td><td>".

$ common."</td></tr>";

}

echo"</table>";

mysql free result($ result);

mysql close($ connect);//关闭数据库连接

?>

3.5.2使用PHP实现范围搜索

案例名称:范围搜索

程序名称:range.php

<?php

echo"<table border=2bordercolor=red>";

$ connect=@ mysql connect("localhost","root","tianen");//连接数据库服务器

if(!$ connect)//验证连接是否成功

{

echo"wrong.";

exit;

}

mysql select db("tianen",$ connect);//选择数据库

$ query="select*from test where id in(1,2,3)";//构造sql选择语句

$ result=mysql query($ query);//执行sql语句,将结果赋予 $ result

$ rows=@ mysql num rows($ result);//返回记录数目

for($ i=0;$ i<$ rows;$ i++)//遍历记录

{

@ mysql data seek($ result,$ i);//定位记录

$ data=@ mysql fetch array($ result);//获得记录数组$ data

$ id=$ data[0];//获得相应字段值

$ title=$ data[1];

$ content=$ data[2];

$ common=$ data[3];

echo"<tr><td>".$ id."</td><td>".$ title."</td><td>".$ content."</td><td>".

$ common."</td></tr>";

}

echo"</table>";

mysql free result($ result);

mysql close($ connect);//关闭数据库连接

?>

3.5.3使用PHP实现模糊搜索

这里演示使用“%”进行模式匹配的情况。

案例名称:模糊搜索

程序名称:fuzzy.php

<?php

echo"<table border=2bordercolor=red>";

$ connect=@ mysql connect("localhost","root","tianen");//连接数据库服务器

if(!$ connect)//验证连接是否成功

{

echo"wrong.";

exit;

}

mysql select db("tianen",$ connect);//选择数据库

$ query="select*from test where content like"%灿烂%"";//构造sql选择语句

$ result=mysql query($ query);//执行sql语句,将结果赋予$ result

$ rows=@ mysql num rows($ result);//返回记录数目

for($ i=0;$ i<$ rows;$ i++)//遍历记录

{

@ mysql data seek($ result,$ i);//定位记录

$ data=@ mysql fetch array($ result);//获得记录数组$ data

$ id=$ data[0];//获得相应字段值

$ title=$ data[1];

$ content=$ data[2];

$ common=$ data[3];

echo"<tr><td>".$ id."</td><td>".$ title."</td><td>".$ content."</td><td>".

$ common."</td></tr>";

}

echo"</table>";

mysql free result($ result);

mysql close($ connect);//关闭数据库连接

?>

3.6常规搜索的弊端

前面复习了数据库常规搜索的基本方法,看起来,似乎使用了常规的模糊搜索就可以解决全文检索的问题,是这样吗?

当然不是。在前面的章节中笔者已经介绍过了,在数据量很少的时候还可以做到快速检索,当数据量加大的时候,搜索速度就非常慢了。因为需要一条一条记录地查看、匹配,记录数量越多,搜索越慢。

读者可以试着将数据库的表格内容增加到10万条,然后执行原来的程序,将发现页面长时间无法显示,如果没有设置脚本运行时间加长的话,最后的结果将是程序运行超时、退出。

常规搜索的弊端就在这里,正是因为常规的模糊搜索无法应付大量的数据,所以出现了基于倒排索引的全文搜索技术。

当然,如果读者只想做一个少量数据的信息管理系统,要在其中实现全文搜索,还是可以用like谓词的,用常规方法就可以解决问题的时候就不要浪费资源、浪费精力。即便是读者要做一个小规模的论坛或个人博客,也还是可以用常规的搜索方法,但是要做数据库优化、应用程序缓存优化、SQL语句优化等工作,还要对访客的搜索行为作适当的限制以避免对服务器造成大冲击。

讲这些目的在于:如果读者是为了解决眼前的小问题,那么,掌握这些知识就可以了,后面要讲的技术比常规的搜索技术要稍微复杂一些。读者应该了解,只要能在常规的搜索中做好优化,依然能解决大量的实际问题。

从下一章起,开始介绍基于数据库的全文搜索的实现,全文搜索的实现原理和普通的数据库搜索是完全不同的。使用全文搜索技术,可以解决更高层面的问题。

小结

本章介绍了基于数据库的常规搜索的原理和相关技术,举了一些例子来说明这些问题。

这一章是总结旧知识,为下一章学习数据库的全文搜索作准备。

思考与练习

1.使用JSP实现一个普通的数据库搜索引擎。

2.精确搜索和模糊搜索的分别是什么?

同类推荐
  • 新课标英语学习资源库-公主与美洲狮

    新课标英语学习资源库-公主与美洲狮

    课标是常新的,经典却是永恒的,走进经典的选择,学习兴趣的提高离你只有一步之遥。本套丛书包括奥林匹斯山众神、白雪公主、百万英镑、包打听、财神与爱神、打火匣、带家具出租的房子、公主与美洲狮、好孩子的故事、荷马墓上的一朵玫瑰、黄缘奇遇、灰姑娘、井边的牧鹅女、警察与赞美诗、两个勇敢的伊洛特人、母亲的故事、牧羊女和扫烟囱的人、女巫的面包、青蛙王子、三万元遗产、沙丘的故事、忒修斯历险记、特洛伊战争、天国花园、小爱达的花、小红帽、幸福的家庭、雪人、一本不说话的书、勇敢的小裁缝。
  • 少年派:第十五届新概念作文获奖者作品精选(B卷)

    少年派:第十五届新概念作文获奖者作品精选(B卷)

    本书精选2013年第十五届新概念作文大赛一、二等奖获奖者的作品,结集出版,分为A、B两卷,本书为B卷。按照每篇作品的不同风格和主题共有六大章节,分别是“短歌”、“花期”、“彼时”、“淡忆”、“浮世”和“下一站”。每个章节主题独立,构思新颖,全面展现新一代青少年个性独立、自由张扬的文风。他们用纯朴、个性的文字表达出对青春的热爱和留恋,对人生的思考和感悟。
  • 苏培锦诗文杂抄

    苏培锦诗文杂抄

    本书分为学术篇;寄语篇;人生篇;情谊篇;诗歌篇;电视篇。内容包括:从社会需要出发,改革语文教学、涓涓春水浇心田、语文教学如何培养学生思维、改进作文批改方法实验报告、语文教学二题等。
  • 应用写作教程新编

    应用写作教程新编

    《应用写作教程新编》,一仍原先《应用写作教程》的框架,内容分为“上编”和“下编”两大部分。上编为“基础知识”部分;下编为“文体知识”部分。基础知识部分是在高中语文课的基础上把写作划分为“主题”、“材料”、“结构”、“表达方式”、“文风”和“拟稿与修改”等六章,分别力求准确阐述其精华和要义,以作为应用写作过程的理论基础和指导思想,达到理论联系实际和学以致用的目的。
  • 审视高等护理教育的质量与标准

    审视高等护理教育的质量与标准

    科学技术的飞速发展、全球性医疗保健体制的改革,以及医学护理模式从疾病治疗转向健康促进和疾病预防,对高等护理人才的培养提出了新的质量内涵要求。经济全球化和医学教育标准的国际化带来了我国高等护理教育的国际化要求,国外高等护理教育质量标准的研究和发展对我国高等护理教育改革和研究起着直接的影响作用。
热门推荐
  • 美食与保健——高血脂食疗谱

    美食与保健——高血脂食疗谱

    本书主要针对生活中患有高血脂群体的食疗菜谱,主要讲述了以下几类菜谱:素菜谱;荤菜谱;粥菜谱;高血脂食疗汤菜谱;高血脂食疗主食谱;疗药茶;疗药酒。
  • 魂印天穹

    魂印天穹

    一个漆黑的圆盘子,但不要小看它哦,它可是武魂。而且还有复制其它武魂的能力,此乃牛气哄哄的“打印机”。中二少年携“打印机”畅游强者如林的天宇大陆。谁来为伴?共享长久。谁来为敌?跪伏颤抖。打印机在手,天下我有!
  • 剑以魂人至圣

    剑以魂人至圣

    南海舰队某驱逐舰支队上尉枪炮长杨阳在一次海眼科考护航任务中卷入涡流,穿越到了一个修者世界,豪华变身为没落家族的败家子,他该何去何从,是沉沦还是在异世崛起……且看柳传素异世剑圣成长路
  • 霸少的宠儿

    霸少的宠儿

    万晴意外结识了真正的贵族公子,阳光帅气却又霸道的刘宇阳,个性强硬的万晴引起了刘宇阳的注意,并把万晴放在身边做了自己的贴身丫鬟,两人的相处如同火星撞地球,囧事百出,却也撞出了爱的火花,当阳光美男对自己展开爱的攻势,万晴却不敢接受这如火般的热情,就在两人处境尴尬时,一个不速之客的到来,彻底打乱了万晴的心,他就是万晴的初恋男友,冷峻帅气的迟峰,他到底是对万晴旧情难忘想要再续前缘,还是要破坏万晴的幸福让她万劫不复。坚强善良的万晴的爱情该何去何从?(本文纯属虚构,请勿模仿。)
  • 第一次做妈妈:全职母亲体验手记

    第一次做妈妈:全职母亲体验手记

    本书以作者的育儿经历贯串全篇,尤其关注育儿过程中的细节,在每一个关键阶段都有综合了专家观点和妈妈们经验的重点议题,还对孕婴用品、婴儿玩具早教图书等的选择和使用提出了建议,并以手册方式提供关键词的快速查找。
  • 擎少,我欠你幸福

    擎少,我欠你幸福

    十年前莫晓晓屁颠屁颠的跟在苏擎天的身后,做他的小跟班,做他的兄弟,甚至于做他与女朋友之间的传话筒都没关系。直到那一天,苏擎天对着她残忍的说:“莫晓晓,我受够你了,你能不能不要再跟着我!”自那以后,苏擎天的身后,便再也看不到莫晓晓的身影。十年后苏擎天回到了当初渴望逃离的城市,来到了那记忆尘封的校园。再回首,苏擎天终于明白这日日夜夜心底明灭的伤痛!如果每个人此生都有一个劫,那么莫晓晓,你便是我苏擎天今生无法逃脱的劫!如果十年的伤痛,换来的只能是笑看你挽着他人的手,那么,我们此生还不如从未相见!没有人会在被伤害之后,仍然在原地等着你!等你关心,直到我关上了心!--情节虚构,请勿模仿
  • 莫花圣曲

    莫花圣曲

    三千年的寂寞,牵绊这爱与恨,到底是对还是错?今生来世,抓紧还是错过?生命轮回的齿轮已悄然转动,富家千金变身救世主,却是一念之差,被愤怒滋养,苏醒魔瞳,沉睡千年的巨能量欲颠覆星球。待到冰消雪霁之后手执高傲之莫花,以博爱之名义踏上救赎母星的道路,谁又在背后奏响生命最终的圣曲,默默守护......
  • 那些年,我们不曾忘记

    那些年,我们不曾忘记

    在那个纯净而又激情燃烧的年代。穆启山家有两小子和一姑娘。个个长得着实让他人叹服,不似将军就是似仙。不想,有一天,刚当上大队会计的大小子随大队书记去县城开会带回来一通知,有知青要来......
  • 合租医仙

    合租医仙

    帮美女治个病,人家治病救个人,咱们治病偷颗心。比医术?神医的病都是我治的;比后台?各领导都争相巴结;什么?你居然想和我比女人?呵呵。
  • 好妈妈培养优秀男孩的100个细节

    好妈妈培养优秀男孩的100个细节

    本书从男孩的生活习惯、美好性格、良好心态、智慧培养、情商教育、美德教育、挫折教育、学习生活、娱乐活动、气质修养10个方面进行分析和讲述家庭教育方法。