共3个问题。
本来就2句SQL语句。但查询会重复出现结果,怎么过滤掉重复的啊?
比如查询 xxx zzz 第一条和第2条都匹配!结果导致重复!
还有如果数据是 DxxD CzzzC 不想匹配,只完全匹配xx zz 要怎么写SQL啊?
还有怎么不区分大小写查询?
下面全部代码。<?php
if(@$_GET['serch']){
mysql_connect("localhost","heihei","123123");
mysql_select_db("news");          
mysql_query("set names 'utf-8'");
$_GET["serch"]=preg_replace("#^[\s]+#","",$_GET["serch"]); //去掉以空格开头的空格
$_GET["serch"]=preg_replace("#[\s]+$#","",$_GET["serch"]); //去掉以空格结尾的空格
$chaifen=explode(" ",$_GET["serch"]);   //数据拆分//print_r($chaifen);echo count($chaifen);if(count($chaifen==1)){
$danguanjianzi="SELECT * FROM `sjk` where `biaoti` like '%$_GET[serch]%'";
$danguanjianzi=mysql_query($danguanjianzi);
while($rr=mysql_fetch_array($danguanjianzi)){
$rr["biaoti"]=preg_replace("#($_GET[serch])#","<b>\\1</b>",$rr["biaoti"]);
echo $rr["biaoti"]."..........<br>";
}
}if(count($chaifen)>1){
$sql="SELECT * FROM `sjk` where `biaoti` like '%$chaifen[0]%' and `biaoti` like '%$chaifen[1]%'";
$sql=mysql_query($sql);
while($r=mysql_fetch_array($sql)){
$r["biaoti"]=preg_replace("#($chaifen[0])#","<b>\\1</b>",$r["biaoti"]);
$r["biaoti"]=preg_replace("#($chaifen[1])#","<b>\\1</b>",$r["biaoti"]);
echo $r["biaoti"]."<br>";
}
}  
}
?>
<form action="" method="get">
  <input name="serch">
  <input type="submit" value="serch"/>
</form>

解决方案 »

  1.   

    $_GET["serch"]=preg_replace("#^[\s]+#","",$_GET["serch"]); //去掉以空格开头的空格
    $_GET["serch"]=preg_replace("#[\s]+$#","",$_GET["serch"]); //去掉以空格结尾的空格
    $chaifen=explode(" ",$_GET["serch"]); //数据拆分去除头尾空格用trim就可以了
    $_GET["serch"] = trim($_GET["serch"]);然后下面就不用判断数组个数了。
    sql直接这么写。$serch_sql = " AND LIKE '%" . str_replace(' ', "%' OR LIKE '%", $_GET["serch"]) . "%'";
    $sql="SELECT * FROM `sjk` where `biaoti` WHERE 1" . $serch_sql;
    $sql=mysql_query($sql);
      

  2.   

    这SQL着实看不懂...
    能帮说下原理不?
      

  3.   

    输出了下看明白了,,不错!!(但是写这么似乎影响替换关键字变色哦?)
    trim 转换 首字母变大写了,麻烦!!
    怎么不区分大小写查询数据库呢?
      

  4.   

    这个怎么会影响你替换呢。这只是一sql语句。
    trim 转换 也不会首字母变大写的 0_0
    不区分大小写查询数据库
    这跟mysql引擎字符集有关。
    记得结贴呐~
      

  5.   

    不区分大小写的方法很多.这里给你一个SQLSELECT   `Name`   FROM   `tablename`   WHERE   LOWER(`Name`)   =   LOWER( '$Str ');
      

  6.   

    如果sql不区分大小写。源码放在unix上不出现问题才怪呢。