php+mysql查询上万条数据很慢,其中把分页去掉就快了

2025-06-21 08:55:56
推荐回答(2个)
回答1:

你的这个分页函数是全部查完之后再每次显示一页,还是每次只查询一页的数据

回答2:

/**
* 分页函数
*
* @access public
*
* @param int $num 总数
* @param int $perpage 每页数目
* @param int $curpage 当前页
* @param bool $append 是否附加省略号
*
* @return string
*/
function multipage($num, $perpage, $curpage, $maxpages = 0, $page = 10, $simple = 0, $onclick = '')
{
$multipage = '';
$onclick = $onclick ? ' onclick="'.$onclick.'(event)"' : '';
//url处理
$mpurl = $_SERVER['PHP_SELF'];
if(isset($_SERVER['QUERY_STRING']))
{
$mpurl .= '?' . preg_replace('/&page=[0-9]*/','',$_SERVER['QUERY_STRING']) . '&';
}
if($num > $perpage) {
$offset = 2;

$realpages = @ceil($num / $perpage);
$pages = $maxpages && $maxpages < $realpages ? $maxpages : $realpages;

if($page > $pages) {
$from = 1;
$to = $pages;
} else {
$from = $curpage - $offset;
$to = $from + $page - 1;
if($from < 1) {
$to = $curpage + 1 - $from;
$from = 1;
if($to - $from < $page) {
$to = $page;
}
} elseif($to > $pages) {
$from = $pages - $page + 1;
$to = $pages;
}
}

$multipage = ($curpage - $offset > 1 && $pages > $page ? '[]' : '').
($curpage > 1 && !$simple ? '[上一页] ' : '');
for($i = $from; $i <= $to; $i++) {
$multipage .= $i == $curpage ? '['.$i.']' :
'['.$i.']';
}

$multipage .= ($curpage < $pages && !$simple ? ' [下一页]' : '').
($to < $pages ? '[]' : '').
(!$simple && $pages > $page ? '' : '');

$multipage = $multipage ? '

' : '';
}
return $multipage;
}

示例:
$page = intval( isset($_GET['page']) ? $_GET['page'] : 1 );
$perpage = intval( isset($_GET['perpage']) ? $_GET['perpage'] : 18 );
if($page > 0) {
$startlimit = ($page - 1) * $perpage;
} else {
$startlimit = 0;
}

$sql = "SELECT COUNT(id) AS countnum FROM {$tablepre}article WHERE moduleid = $module_id";
$log = $db->fetch_one_array($sql);
$total = $log['countnum'];
$result = $db->query("SELECT * FROM {$tablepre}article WHERE moduleid = $module_id ORDER BY listnum,id DESC LIMIT $startlimit,$perpage");
$article = array();
while($data = $db->fetch_array($result)) {
$data['addtime'] = gmdate('Y-n-j H:i',$data['addtime']);
$article[] = $data;
}
$page_control = multipage($total,$perpage,$page);