有两个数据表,分别是a和b,从a和b中搜索出来的文章进行合并而且添加上分页
a、b表的字段必须是一样的。
使用union链接起来
后台代码:
//引入框架自带分页渲染类
use think\paginator\driver\Bootstrap;
public function index()
{
$keyword = $this->request->param('keyword');
$page = $this->request->param('page') ?? 1;
//客户端传过来的分页
$pageNumber = $page ? $page : '1';
if($pageNumber > 0){
$pageNumber_one = $pageNumber - 1;
} else {
$pageNumber_one = 1;
}
$limit = 10;//每页显示条数
$offset = $pageNumber_one * $limit;
if (!empty($keyword)) {
$sql = "( SELECT `title` FROM `a` WHERE `title` LIKE '%{$keyword}%' ORDER BY id DESC ) UNION
( SELECT `title` FROM `b` WHERE `title` LIKE '%{$keyword}%' )
LIMIT 0,10";
$data = Db::query($sql);
//查询的总条数
$sqlTotal = "( SELECT `title` FROM `a` WHERE `title` LIKE '%{$keyword}%' ORDER BY id DESC ) UNION
( SELECT `title` FROM `b` WHERE `title` LIKE '%{$keyword}%' )";
$counts = Db::query($sqlTotal);
$count = count($counts);
//分页
$pagernator = Bootstrap::make($data,$limit,$pageNumber,$count,false,['path'=>Bootstrap::getCurrentPath(),'query'=>request()->param()]);
$page = $pagernator->render();
foreach ($data as $k => $v) {
//搜索关键字标红
$data[$k]['title'] = str_replace($keyword,'<font color=\'red\'>'.$keyword.'</font>',$v['title']);
}
}
$this->assign("data", $data ?? '');
$this->assign('page', $page);
$this->assign("keyword", $keyword);
$showtpl = 'search';
return $this->fetch($showtpl);
}
前台代码:
<foreach name="data" item="vo">
<div class="news_item">{$vo.title}</div>
</foreach>
//分页
<div class="pub_turn_page">
<page />
</div>