为了方便查找内容,不免要在网站添加搜索功能,要注意的是搜索虽然方便可是也增加了对数据库查询的压力。
所以啊,搜索是双刃剑,用的时候还是要注意场合,做一下优化之类的。
我用的是thinkphp,在博客也加个搜索功能,但是我只想搜索标题中含有的,别浪费太多资源搜索全文了
下面开始举例子:
这是thinkphp里面一个function:
//搜索功能
public function search(){
$blog = D('blogs'); //这是实例化我的数据表
$search_words = I('post.search_words'); //这是获取搜索关键词
$data = array();//定义一个空数组
$data['title'] = array("like","%".$search_words."%");//查询数据库里面标题中含有关键词的数据
$result = $blog -> where($data) ->select();//选择上一步查询到的结果
$this -> assign('lists',$result);//传送到前端模板文件
$this -> display();//这里是调用模板
}
这里用了like关键词。
这样就可以在模板中做一个循环显示结果了:
还可以自己修改一下排序等,优化一下搜索。
注意:用get获取关键词对分页可以直接进行,用post方式要进行其他设置,下面我是以get方式的案例,这样可以给搜索结果分分页。
//搜索功能
public function search(){
$blog = D('blogs');
$setting = D('settings');
$configs = $setting -> showAll();
$search_words = I('get.search_words');//获取搜索关键词
$data = array();
$data['title'] = array("like","%".$search_words."%"); //进行搜索查询
$count = $blog->where($data) -> count();//统计查询结果总数
$Pages = new \Think\Page($count,$configs['index_count']);//实例化分页类
$lists = $blog -> order('id desc')->limit(0,10) ->select();//最近文章用
$result = $blog ->where($data)-> order('id desc')->limit($Pages->firstRow.','.$Pages->listRows)->select();
$page = $Pages -> show();
$this -> assign('list',$lists);
$this -> assign('blogs',$result);
$this -> assign('page',$page );
$this -> assign('config',$this -> config);
$this -> display();
}