庆云php

庆云php

讯睿搜索模块改为永远都按ID排序的方法

PHP 0

2023年11月20日 每日一猜答案: 答案:ABC
每日一猜答案分析:

当我们在遇到数据库较大时,常被搜索引擎大量查找时,我们常常会较量,

下边分别讲两种修改方案。

当排序慢时,我们在MYSQL慢日志中可以查看到,

凡遇到

SELECT * FROM `dr_1_news` WHERE (`dr_1_news`.`title` LIKE "%林景熙%" OR `dr_1_news`.`keywords` LIKE "%林景熙%") ORDER BY `dr_1_news`.`hits` DESC LIMIT 300,10;

这样的,我们直接修改下边文件,

dayrui/App/Module/Action/Search.php

修改下105行如下代码,主要是加这一行,

//搜索大于300页时,直接查询条件置空,无法查找。。
if($page>300){
    $sql_where='';
}

可以将大于多少页后的数据置空不查询,我这是将300页面后的数据置空不可询。。


$system['order'] = $this->_set_orders_field_prefix($system['order'], $_order); // 给排序字段加上表前缀

// 分页处理
$page = $this->_get_page_id($system['page']);
//搜索大于300页时,直接查询条件置空,无法查找。。
if($page>300){
$sql_where='';
}


修改下76行如下代码,主要是这一行,$system['order'] ='id';,可以将排序强制改为以ID排序。

// 排序操作
if (!$system['order'] && isset($where['id']) && $where['id']['adj'] == 'IN' && $where['id']['value']) {
// id序列来排序
$system['order'] = strlen($where['id']['value']) < 10000 && $where['id']['value'] ? 'instr("'.$where['id']['value'].'", `'.$table.'`.`id`)' : 'NULL';
} else {
// 默认排序参数
// !$system['order'] && ($system['order'] = $system['flag'] ? 'updatetime_desc' : ($action == 'hits' ? 'hits' : 'updatetime'));
$system['order'] ='id';
}