建议中文或字符串关键字查询 使用 like 关键字 ,例如 like '%企业%' 。在程序中进行非空判断并对空条件做一定处理(加一层保护)
写完整吧,比如表名为aaa 楼盘名称为111 预售证号为222 开发商名称为333 小弟很菜。
你要说清楚,三个都输入用and 还是 or 连接。
写完整吧,比如表名为aaa 楼盘名称为111 预售证号为222 开发商名称为333 小弟很菜。 select * from aaa where a like "%111%" or b like "%222%" or c like "%333%";
是不是说如果非空就作为同时满足的条件? 如输入了楼盘名称和预售证号,就输出同时满足含有楼盘名称和预售证号的结果; 如输入楼盘名称、预售证号和开发商,就输出同时含有这三个内容的结果。这样的话,对应每一项输入,搜索每件应该是:要么没有输入,要嘛作为搜索条件(len(inA)=0 or FieldA like CONCAT("%"), inA, "%") 然后把三个条件用And连接; (len(inA)=0 or FieldA like CONCAT("%"), inA, "%") AND (len(inB)=0 or FieldB like CONCAT("%"), inB, "%") AND (len(inC)=0 or FieldC like CONCAT("%"), inC, "%") 这样如果三项都没有输入,则检索全部记录。
(len(inA)=0 or FieldA like CONCAT("%", inA, "%")) AND (len(inB)=0 or FieldB like CONCAT("%", inB, "%")) AND (len(inC)=0 or FieldC like CONCAT("%", inC, "%"))
还有一种方法... 分别作判断 好比如下 $colA==''?$colAcondition = " colA='$colA' ":$colAcondtion = ' 1=1 '; $colB==''?$colBcondition = " colB='$colB' ":$colBcondtion = ' 1=1 '; $colC==''?$colCcondition = " colC='$colC' ":$colCcondtion = ' 1=1 '; if ($colA=='' and $colB=='' and $colC==''){ $condition = ' 1=1 '; }else{ $condtion = $colAcondition." and ".$colBcondition." and ".$colCcondition; }$sql = "select * from table where ".$condtion; 后面就是你的一些查询处理之类的....
上面的是== 按照上面其他楼说的.. 你最好是把colA='$colA'换成 colA like '%$colA%' 之类的...
(LENGTH(inA)=0 or FieldA like CONCAT("%", inA, "%")) AND (LENGTH(inB)=0 or FieldB like CONCAT("%", inB, "%")) AND (LENGTH(inC)=0 or FieldC like CONCAT("%", inC, "%")) 可保证任一输入值的组合都可查询到结果 如果要使无输入时没有查询结果,则需加上前缀条件 LENGTH(CONCAT(inA,inB,inC))>0 AND
select * from aaa where a like "%111%" or b like "%222%" or c like "%333%";
如输入了楼盘名称和预售证号,就输出同时满足含有楼盘名称和预售证号的结果;
如输入楼盘名称、预售证号和开发商,就输出同时含有这三个内容的结果。这样的话,对应每一项输入,搜索每件应该是:要么没有输入,要嘛作为搜索条件(len(inA)=0 or FieldA like CONCAT("%"), inA, "%")
然后把三个条件用And连接;
(len(inA)=0 or FieldA like CONCAT("%"), inA, "%") AND (len(inB)=0 or FieldB like CONCAT("%"), inB, "%") AND (len(inC)=0 or FieldC like CONCAT("%"), inC, "%")
这样如果三项都没有输入,则检索全部记录。
分别作判断
好比如下
$colA==''?$colAcondition = " colA='$colA' ":$colAcondtion = ' 1=1 ';
$colB==''?$colBcondition = " colB='$colB' ":$colBcondtion = ' 1=1 ';
$colC==''?$colCcondition = " colC='$colC' ":$colCcondtion = ' 1=1 ';
if ($colA=='' and $colB=='' and $colC==''){
$condition = ' 1=1 ';
}else{
$condtion = $colAcondition." and ".$colBcondition." and ".$colCcondition;
}$sql = "select * from table where ".$condtion;
后面就是你的一些查询处理之类的....
按照上面其他楼说的..
你最好是把colA='$colA'换成 colA like '%$colA%' 之类的...
图上的三个搜索框,字段都在一个表里同一条记录中的三个字段。
目前只有第一个框能搜索出东西,后面两个框搜索无效。我要三个框任意框能搜索出东西,和三个框任意两个三个组合都能搜索出东西。<form method="get" action="{cms_abs}search.php">
<input type="hidden" name="chid" value="209" />
<input type="hidden" name="caid" value="815" />
楼盘名称<input type="text" id="searchword" name="searchword" value="" />
预售证号:<input name="fmdata['yszh']" type="text" id="yszh" value="" />
开发企业名称:<input name="fmdata['kaifashang']" type="text" id="kaifashang" />
<input type="submit" class="ysssbtn" value=" "/>
</form>
搜索框是这么写的以下是获取搜索结果的列表
{c$yszlb [tclass=archives/] [chids=209/] [chsource=2/] [caidson=1/] [casource=1/] [caids=815/] [detail=1/] [isfunc=1/] [wherestr=u_sql_arc()/] [ttl=600/] [mp=1/]}
列表
{/c$yszlb}表名字为:cms_archives_209 栏目id 815 楼盘名称字段为subject 预售证号 yszh 开发商名称 kaifashang
指点下怎么改呢
给说详细点,各种可能我都实验过了,整了一天了,还没弄好,求看看。
你是AND还是OR的逻辑...
AND的逻辑最简单,按照我上面说的..自己组合查询语句...
OR的逻辑复杂点...
不过你自己可以造成组合...不过给你我个人的思路..
先分别判断输入框是否为空,或者全部为空..生成一个where的查询条件..
再将这三个where查询条件组合成一个...
你可以将or 写入你每一个生成的where里面...
这样组合就简单些
可保证任一输入值的组合都可查询到结果
如果要使无输入时没有查询结果,则需加上前缀条件
LENGTH(CONCAT(inA,inB,inC))>0 AND