关于站内搜索  有几个小疑惑  请大家帮忙解释下单关键字就不用说了   主要是多关键字,在多关键字搜索的时候是不是要把关键字分割成数组?如果是分割成数组(不能确定数组的长度,因为不知道用户会输入几个关键字),那么sql中的where该怎么写?我看的教程是这样写的 $sql = select * from bbs where title like '%$array[0]%' or content like '%$array[1]%';如果是这样,那么如果title中有$array[1] , content中有$array[0]岂不是搜不出来?

解决方案 »

  1.   

    比起你的问题,我觉得你更要考虑的是搜索效率.你的问题很简单,使用foreach 来拼装SQL即可
      

  2.   

    如果对于小数据量,可以这样:
    假设用户输入一堆关键字,按照空格(或逗号)分割成数组,假设叫$array
    $sql=select * from tablename where 1=1 
    foreach ($array as $value)
    {
        $sql.= and title like '%$value%' or content like '%$value%'
    }
    博主的这个sql 如果有几万的纪录跑起来,就相当吃力了。数据库的like查询是便利所有的表纪录,时间复杂度是O(n)
    如果数据多的话,考虑给title content分词,使用哈希表O1的效率下找到对应表的主键,再从数据库查询