//将$kw以空格拆分成数组
    $kws = explode(' ',$kw);    $n = count($kws);    $field = 'title'; //要查询的字段名    $sk='';    for($i = 0;$i < $n; $i ++)
    {
     if($i < ($n-1))
     {
     $sk .= $field.' like "%'.$kws[$i].'%" or ';
     }else{
     $sk .= $field.' like "%'.$kws[$i].'%"';
     }
    }
    $sql = "SELECT id,title FROM `ask` WHERE $sk";    $qu  = mysql_query($sql) or die(mysql_error());    while($row=mysql_fetch_array($qu))
    {
     foreach($kws as $kv)
     {
     $row[title]  = preg_replace("/($kv)/","<font color=red><b>\\1</b></font>",$row[title]);
     }     echo "<p align=\"center\">".$row[title]."<p>";//输出结果是按照查询顺序输出
    }
//怎么样才能让结果按照相关度输出呢? 比如说 $kw 是 “企业 文化” 怎么让查询结果中同时包含 “企业 文化”的内容排在最前面,接着是 包含 企业 的内容 最后是 包含文化的内容

解决方案 »

  1.   

    这种最好是全文索引解决,但mysql 默认不支持中文全文索引,需要插件。有兴趣你搜下,mysql 中文 全文索引如果支持,直接WHERE MATCH (field_a,field_b, ……) AGAINST ('关键词'); //多个字段联合全文索引
      

  2.   

    不推荐但是可以用:select *
    from table 
    where title like '%aaa%'
      or title like '%bbb%'
    order by (instr(title,'aaa')>0)+(instr(title,'bbb')>0) desc
      

  3.   

    只是举个例子,你用你code里的方法一样把它拼接起来就行了
      

  4.   

    MATCH (field_a,field_b, ……) AGAINST ('关键词'); 
    返回的是什么
     $sql = "SELECT * FROM `ask` WHERE MATCH (title) AGAINST ('$kw')";    $qu  = mysql_query($sql) or die(mysql_error());    while($row=mysql_fetch_array($qu))
        {
            echo $row[title]."<br>";     //title字段中有包含 $kw 的行,但是这里没有任何输出。是因为中文的原因吗
         }