自己实现了个多关键字模糊查询。一直觉得很鸡肋,看了dede那个搜索的源码,有个类arc.searchview.clas.php中有个函数是这样写的:


/**
 *  获得关键字SQL
 *
 * @access    private
 * @return    string
 */
function GetKeywordSql()
{
    $ks = explode(' ',$this->Keywords);
    $kwsql = '';
    $kwsqls = array();
    foreach($ks as $k)
    {
        $k = trim($k);
        if(strlen($k)<1)
        {
            continue;
        }
        if(ord($k[0])>0x80 && strlen($k)<2)
        {
            continue;
        }
        $k = addslashes($k);
        if($this->ChannelType < 0 || $this->ChannelTypeid < 0){
            $kwsqls[] = " arc.title LIKE '%$k%' ";
        }else{
            if($this->SearchType=="title"){
                $kwsqls[] = " arc.title LIKE '%$k%' ";
            }else{
                $kwsqls[] = " CONCAT(arc.title,' ',arc.writer,' ',arc.keywords) LIKE '%$k%' ";
            }
        }
    }
    if(!isset($kwsqls[0]))
    {
        return '';
    }
    else
    {
        if($this->KType==1)
        {
            $kwsql = join(' OR ',$kwsqls);
        }
        else
        {
            $kwsql = join(' And ',$kwsqls);
        }
        return $kwsql;
    }
}

原来是用了contact函数,先将多个(要查询的)字段的内容起来,然后在用like匹配关键字,多个关键字的话他们之间就用and或or连接