重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
SQL模糊查询的语法为
创新互联服务项目包括五莲网站建设、五莲网站制作、五莲网页制作以及五莲网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,五莲网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到五莲省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
“SELECT column FROM table WHERE column LIKE ';pattern';”。
SQL提供了四种匹配模式:
1. % 表示任意0个或多个字符。如下语句:
SELECT * FROM user WHERE name LIKE ';%三%';
将会把name为“张三”,“三脚猫”,“唐三藏”等等有“三”的全找出来;
2. _ 表示任意单个字符。语句:
SELECT * FROM user WHERE name LIKE ';_三_';
只找出“唐三藏”这样name为三个字且中间一个字是“三”的;
SELECT * FROM user WHERE name LIKE ';三__';
只找出“三脚猫”这样name为三个字且第一个字是“三”的;
3. [ ] 表示括号内所列字符中的一个(类似与正则表达式)。语句:
SELECT * FROM user WHERE name LIKE ';[张李王]三';
将找出“张三”、“李三”、“王三”(而不是“张李王三”);
如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
SELECT * FROM user WHERE name LIKE ';老[1-9]';
将找出“老1”、“老2”、……、“老9”;
如要找“-”字符请将其放在首位:';张三[-1-9]';
4. [^ ] 表示不在括号所列之内的单个字符。语句:
SELECT * FROM user WHERE name LIKE ';[^张李王]三';
将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;
SELECT * FROM user WHERE name LIKE ';老[^1-4]';
将排除“老1”到“老4”寻找“老5”、“老6”、……、“老9”。
!最后是重点!
由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”、“';”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:
function sqlencode(str)
str=replace(str,"';","';';")
str=replace(str,"[","[[]") ';此句一定要在最先
str=replace(str,"_","[_]")
str=replace(str,"%","[%]")
sqlencode=str
end function
SELECT * FROM oneself WHERE name like '%'
like 是模糊查询的关键字。
% 是通配符,代表多个任意匹配,比如 '%人民' 就是搜索前半段是任意字符,结尾是人民的记录,类似的可以将 % 放在条件字段的任意位置。
_ 是单个字符的统配符,可以匹配单个任意字符。
PHP 不需要像你这样写,双引号中出现的变量将自动被解析。
$sql = "SELECT * FROM oneself WHERE name like '%{$colname_Recordset1}' LIMIT {$startRow_Recordset1}, {$maxRows_Recordset1}";
$Recordset1 = mysql_query($sql) or die(mysql_error());
{} 放在变量两边是直接指明这是个变量及该变量的名字,如果遇到数组类型的变量效果比较明显,不然可能会造成数组型变量名解析出错。
1、select * from stu where no =‘$no’ and name='$name' and sex='$sex' and class like '%$class%';
正确,确定传过来的值正确就可以
2、按id值输出,查询得的两个表id不同,既然两个表不是按id关联的,你想按哪个id显示,就用哪个就可以了,不清楚,可以输出一下数组,看看需要哪些数据
1、如果你什么也没有输入的话,sql语句就如下:
select * from tablename where name like '%%';
这样的话就是 name 等于任何字符都会被查出,当然所有内容都会出来了。
2、这不是问题,从查询的设计角度看,什么都不输入自然是要匹配所有数据,相反输入了东西就是匹配它了。
*****************
补充:
*****************
如果你想什么都不输入的时候什么也不返回的话方法如下:
在后台写两个sql,类似如下
if ($name == ""){
$exec="select * from tablename where 1=2";
}else{
$exec="select * from tablename where name like '%$name%'";
}
---
以上,希望对你有所帮助。
mysql 中一般使用like 来进行模糊查询,但like 的效率非常的低,容易导致全表扫描,因此不推荐使用。
那有木有其他的方法代替like来进行模糊查询呢?
替代方法肯定是有的,以下是几个可替代like 进行模糊查询的 关键词
instr
locate
position
find_in_set
下面简单介绍下各个方法的使用情况
测试对象content 表
SELECT COUNT(mlzm_content.id) FROM mlzm_content
数据量: 33034 条信息
LIKE
SELECT id,Title from mlzm_content WHERE Title LIKE '%美女%'
结果:294 条记录
耗时: 0.0130 秒
SELECT id,Title from mlzm_content WHERE Title LIKE '%模特%'
结果:10 条记录
耗时: 0.0550 秒
结论:但查询到结果集的数据量少的时候like耗时会增加,即总数据量不变,结果越少耗时约大
INSTR
语法:INSTR(str, substr)
SELECT id,title from mlzm_content WHERE INSTR(Title,'美女')0;
结果:294 条
耗时:0.0150 秒
INSTR(str, substr) 与LOCATE(substr, str) 类似,只是参数的位置变了
LOCATE
语法:LOCATE(substr, str)
SELECT id,title from mlzm_content WHERE LOCATE('美女',Title)0;
结果:294 条
耗时: 0.0150 秒
SELECT id,title from mlzm_content WHERE LOCATE('模特',Title)0
结果:10条
耗时: 0.0760 秒