Mysql JBspider的条件分页
评论 1 热度 1395
这是一种很捉鸡的写法,应该有更优的算法的,但是我的Mysql还很烂,只能拐个弯...
下面的$pageNo应该要先自减一,因为用户一般认为页面是从1开始计数的。
过程:
- 计算有多少个id不显示
- 利用limit查询得到当前页数下不显示的id
- 用个while把获取到的id跑成mysql指令
- 再次执行查询,附加条件不显示被ban的id
代码:$wd
: 搜索的关键字$banip
: 被ban的id (手滑写成ip)$pageNo
: 第N页减一$tmp_addon
: 被ban掉的id的个数$searchlimit
: 每页显示多少
其中,第一次与第二次查询到的内容排列顺序必须相同。
<?php
$banid = "id <> -1";
$tmp_addon = $pageNo*$searchlimit;
$tmp_wd = str_replace(" ", "|", $wd);
if (substr($tmp_wd, 0, 1) == "|") {
$tmp_wd = substr($tmp_wd, 1);
}
if (substr($tmp_wd, -1) == "|") {
$tmp_wd = substr($tmp_wd,0,strlen($tmp_wd)-1);
}
$tmp_banid_ = $db->query("SELECT id FROM jb_spider WHERE concat(url,title,html) like '%".$s."%' ORDER BY title REGEXP '(".$tmp_wd.")' desc limit ".$tmp_addon);
while ($tmp_banid = $tmp_banid_->fetch_row()) {
$banid .= " AND id <>".$tmp_banid[0];
}
unset($tmp_banid_,$tmp_banid,$tmp_addon);
$rs = $db->query("SELECT * FROM jb_spider WHERE concat(url,title,html) like '%".$s."%' AND ".$banid." ORDER BY title REGEXP '(".$tmp_wd.")' desc limit ".$searchlimit);
unset($tmp_wd);
ORDER BY title REGEXP (xxx|xxx)
再次让结果按照title排序,模拟权重
杰新博客 Windows 7 · Google Chrome
滑稽
#104 2018-09-04 16:59 回复