![]() |
|
首页 │ Apache │ Linux│ Java│ MySQL│ 注册│帮助 | |||
首先说明数据结构,简化一下
CREATE TABLE guestbook (
`id` int(10) unsigned NOT NULL auto_increment,
`viewmode` set('show','cover') character set binary NOT NULL default '',
)
翻的时候,不显示viewmode == cover 的记录
select * from guestbook where viewmode == 'show' limit n,m
这种办法显然不行,撞上大量cover记录会翻到全空白的页
function padpage($id,$limit,$dir)
{
//dir == 0 is down
//dir == 1 is up
$data = array();
$count = 0;
$seeklength = $limit;
$max = $min = $id;
$order = "";
$maxid = array_pop(mysql_fetch_array(mysql_query('select MAX(id) from guestbook'),MYSQL_ASSOC));
do
{
if($dir == 0){
$max = $min;
$min = $max - $seeklength;
$order = 'ORDER BY id DESC';
}else{
$min = $max;
$max = $min + $seeklength;
$order = 'ORDER BY id';
}
$query = 'SELECT * FROM guestbook WHERE id between '.$min.' and '.$max.' and viewmode = "show"'.$order;
$result = mysql_query($query);
if(mysql_num_rows($result) > 0){
$seeklength = $limit - $count - mysql_num_rows($result);
}else{
$seeklength = $seeklength > 500 ? $seeklength : $seeklength * 2;
}
while($data[$count] = mysql_fetch_array($result, MYSQL_ASSOC)){
$count++;
if($count == $limit){
return $data;
}
}
mysql_free_result($result);
$min--;
$max++;
}
while($max <= $maxid+1000 & $min >= -1000);
return $data;
}
向前翻给一个topid 然后dir=1
向后翻给一个bottompid 然后dir=0
返回的是一个二维数组
现在问题是不能直接 goto 到N页
谁来有更好的解决方案吗?

