HDwiki的搜索代码 本人小白 不知道怎么该 求帮助 谢谢好心人,现在代码可以实现:以空格分开的多关键词搜索,现在实现支持模糊查询的多关键字搜索 并且搜索的结果高亮显示下面是代码:
class searchmodel { var $db;
var $base; function searchmodel(&$base) {
$this->base = $base;
$this->db = $base->db;
}

function get_total_num($sql){
$query=$this->db->query($sql);
$data=$this->db->fetch_array($query);
return $data['num'];
}

function fulltext_search($sql,$start=0,$limit=10){
$doclist=array();
$query=$this->db->query($sql." limit $start,$limit");
while($doc=$this->db->fetch_array($query)){
$doc['time']=$this->base->date($doc['time']);
$doc['tag']=$_ENV['doc']->spilttags($doc['tag']);
$doc['rawtitle']=$doc['title'];
$doc['title']=htmlspecialchars($doc['title']);
$doclist[]=$doc;
}
return $doclist;
}

function join_sql($element){
$keywords = $element['keyword'];
$searchtitle=($_ENV['doc']->get_total_num() < $this->base->setting['search_num'])?0:1;
if($searchtitle){
$sqlkeywords .="d.title LIKE '$keywords%'";
$element['author']="";
$element['categoryid'][0]='all';
}else{
$arraylist = split(" ",$keywords); //将查询关键字通过空格进行分解
                        
                        $sqlkeywords .= "(";  
                        for($i=0; $i<count($arraylist); $i++) //把它们全部输出来
                        { 
                                $keyword = $arraylist[$i];
                                $sqlkeywords .="d.".$element['searchtype']." LIKE '%$keyword%' and "; 
                        }
                        $strleng = strlen($sqlkeywords);                         $temp =  substr($sqlkeywords, 0, $strleng-4);             
                        $temp .= ") or (";
                        for($i=0; $i<count($arraylist); $i++) //把它们全部输出来  
                        {
                                $keyword = $arraylist[$i]; 
                                $temp .="d.content LIKE '%$keyword%' and ";
                        }                         $templeng = strlen($temp);
                        $temp =  substr($temp, 0, $templeng-4); 
                        $temp .= ")";
                        $sqlkeywords = $temp;  }

$sqladd=(trim($sqlkeywords)!='')?' AND ('.$sqlkeywords.")":"";
$sqladd .=(bool)$element['author']?" AND d.author='".$element['author']."' ":"";
$sqladd .=('all'!=$element['categoryid'][0])?' AND c.cid in ('.implode(',',$element['categoryid']).') ':'';
if(0!=$element['timelimited']){
$sqladd .=('within'==$element['withinbefore'])?" AND d.`time` > '".($this->base->time-$element['timelimited'])."'" :" AND d.`time` < '".($this->base->time-$element['timelimited'])."'";
}
$order=" ORDER BY d.".$element['ordertype']." ".$element['ascdesc']."";
$sqladdcat = ('all'!=$element['categoryid'][0])?"INNER JOIN ".DB_TABLEPRE."categorylink c ON d.did=c.did":'';
$result['sql']='SELECT d.did,d.tag,d.title,d.author,d.authorid,d.time,d.summary,d.edits, d.views,d.comments FROM '.DB_TABLEPRE.'doc d '.$sqladdcat.' WHERE 1 '.$sqladd.$order;
$result['dsql']='SELECT COUNT(*) as num FROM '.DB_TABLEPRE.'doc d '.$sqladdcat.' WHERE 1 '.$sqladd;
return $result;
}