十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
你有没有想过如何使用搜索功能在所有整站中实现!互联网博客和网站,大多数都采用MySQL数据库。MySQL提供了一个美妙的方式实施一个小的搜索引擎,在您的网站(全文检索)。所有您需要做的是拥有的MySQL 4.x及以上。MySQL提供全文检索功能,我们可以用它来 ??实现搜索功能。
创新互联是一家集网站建设,砀山企业网站建设,砀山品牌网站建设,网站定制,砀山网站建设报价,网络营销,网络优化,砀山网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
首先,让我们为我们的例子中设置一个示例表。我们将创建一个名为第一个表。
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
);
在此表中还可以添加一些示例数据。执行后,插入查询。
INSERT INTO articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');
一旦样本数据是准备好,我们可以开始我们的全文检索功能。
自然语言全文搜索
尝试我们的示例表上执行下面的SELECT查询。
SELECT * FROM articles
WHERE MATCH (title,body) AGAINST ('database');
你就能看到结果如下:
在下面的数据库比较5 MySQL与YourSQL的...
MySQL教程DBMS 1代表数据库...
我们在上面的SQL查询(标题,正文)反对(“数据库”)的比赛,选择所有的记录,列标题和正文进行全文搜索。
您可以修改该查询,并创建您自己的版本,以自己的数据库中执行全文搜索。
布尔全文搜索
它可能发生,你要指定某些关键字在您的搜索条件。此外,您可能要忽略某些关键字。布尔全文搜索可以用来执行这些要求的全文检索。
检查下面的SELECT查询。
SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
如果您发现上述选择查询,我们增加了布尔MODE反对()。这个查询将获取MySQL的关键字,但不YourSQL关键字的所有记录。请注意+和-我们以前指定的关键字!
在执行此功能,MySQL使用什么有时也被称为布尔逻辑作为暗示,其中:+代表与-代表不是[无操作员]暗示或
以下是几个例子布尔搜索条件。
“苹果香蕉
查找行至少包含两个词之一。
“+苹果+果汁”
寻找包含两个单词的行。
“+苹果Macintosh
查找行包含“苹果”,但排名的行,如果它们也包含“麦金塔”。
“+苹果Macintosh的”
查找行包含“苹果”这个词,而不是“麦金塔”。
'+苹果Macintosh的“
查找包含单词“苹果”的行,但如果该行也包含单词“麦金塔”,速度比如果行不低。这是“软”比“+苹果Macintosh电脑”,为“麦金塔”的存在,导致该行不能在所有返回的搜索。
'+苹果+(营业额馅饼)“
行包含“苹果”和“营业额”,或“苹果”和“馅饼”(任何顺序)的话,但排名“苹果的营业额”比“苹果馅饼“。
限制
支持全文检索的MyISAM表只。MySQL 4.1中,使用多个字符设置一个单一的表内的支持。然而,在一个FULLTEXT索引的所有列,必须使用相同的字符集和校对规则。MATCH()列列表必须匹配完全在一些列清单表的FULLTEXT索引定义,除非这场比赛()是在布尔模式。布尔模式搜索,可以做非索引列,虽然他们很可能是缓慢的。
办法如下:
select * from table1 where concat(`字段`,`字段`,`字段` ) like '%关键字%' union
select * from table2 where concat(`字段`,`字段`,`字段` ) like '%关键字%' union
select * from table3 where concat(`字段`,`字段`,`字段` ) like '%关键字%' union
select * from table4 where concat(`字段`,`字段`,`字段` ) like '%关键字%' union
select * from table5 where concat(`字段`,`字段`,`字段` ) like '%关键字%'
前提是查询出来的字段个数要一样,类型要对应好,至于如何得到正确且符合你需要的sql就要在程序类中处理了。
在数据库中查找某一字段的值的操作方法和步骤如下:
1、首先,在桌面上,单击“
Management Studio”图标,如下图所示。
2、其次,完成上述步骤后,在该界面中,单击左上角的“新建查询”按钮,如下图所示。
3、接着,完成上述步骤后,输入如下红框标注的SQL语句,如下图所示。
4、然后,完成上述步骤后,在该界面中,单击左上方的“执行”选项,如下图所示。
5、最后,完成上述步骤后,在此界面中,显示查询数据库有某个字段,如下图所示。这样,问题就解决了。
?php
$host_name="localhost"; //服务器名
$host_user="root"; //连接服务器的用户名
$host_pass="123456"; //连接服务器的密码
$db_name=""; //服务器上的可用数据库
$my_conn=mysql_connect($host_name,$host_user,$host_pass); //连接服务器
mysql_select_db($db_name,$my_conn); //选择操作的数据库
mysql_query("SET NAMES utf-s"); //设置编码
$sql="select content from sheet where id=0 "//mysql语句
//从sheet表中查询id=0的content的值
$row = mysql_fetch_array(mysql_query($sql,$my_conn));//从mysql返回的结果中提取一 //行
?
mysql
like
语法
like
运算符用于
where
表达式中,以搜索匹配字段中的指定内容,语法如下:
where
column
like
pattern
where
column
not
like
pattern
在
like
前面加上
not
运算符时,表示与
like
相反的意思,即选择
column
不包含
pattern
的数据记录。
like
通常与通配符
%
一起使用,%
表示通配
pattern
中未出现的内容。而不加通配符
%
的
like
语法,表示精确匹配,其实际效果等同于
=
等于运算符。
mysql
like
大小写
mysql
like
匹配字符时,默认是不区分大小写的,如果需要在匹配的时候区分大小写,可以加入
binary
操作符:
select
*
from
user
where
username
like
binary
'%azz%'select
*
from
user
where
username
like
binary
'%azz%'
binary
操作符表示按照二进制进行比较,因此加上该操作符后,便可以严格区分大小写,因此以上两条
sql
查询出来的内容是不同的。
mysql
like
中文字符匹配
由于数据存储编码问题,在某些情况下,mysql
进行
like
搜索返回的数据中除了符合要求的数据外,往往还会返回许多不相干的数据。这时候也需要在
like
后面加上
binary
操作符以进行二进制比较:
select
*
from
user
where
username
like
binary
'%小%'
提示
当在
like
匹配时加上
binary
操作符后,则会严格区分英文大小写。因此当检索的内容是中英文混合且需要忽略英文大小写的时候,就会遇到麻烦。为解决此问题,需要引入
mysql
中的
upper()
与
concat()
函数:
upper():将英文字符串变大写,同ucase()
concat():将多个字符串连接成一个字符串
语法如下:
upper(str)
concat(str1,str2,...)
因此当我们要进行中英文混合匹配检索且要忽略英文大小写时,可以使用如下例所示的
sql
语句:
select
*
from
username
where
upper(username)
like
binary
concatt('%',upper('a中文b'),'%')
在该
sql
中,将搜索的字段及检索的内容都进行大写转换后,再进行二进制匹配。
like
运算符的效率
like
运算符要对字段数据进行逐一扫描匹配,实际执行的效率是较差的,哪怕该字段已经建有索引(a%
这种方式会用到索引)。当数据量较大时,要尽可能的减少
like
运算符的使用,也没有太多优化的余地。