麻辣堂|资源主站|开发论坛|在线手册
首页 Apache Linux Java MySQL 注册帮助 
PHP项目开发组是PHP开发资源网于2007组年建成立的项目开发团队,目前核心开发成员有27人, 项目协作成员8名.下设7个开发组,主要承接大/中型网站项目开发任务。

    由于开发任务较多,人员比较紧张,现面向社会招聘全职或者兼职开发人员,不管你是在校大学生,还是全职开发人员,以及SOHO都可以联系本站,我们可以长期合作,并为您带来丰厚的报酬。
  您现在的位置:PHP开发资源网 > 麻辣堂 > 详细资料
待解决
我的一个翻页算法
悬赏分:20 - 2007年08月18日

首先说明数据结构,简化一下
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页
谁来有更好的解决方案吗?

提问者:julius2600   08-18 14:02
答复
路过。。。顺便帮顶:)
回答者:玉米づ冰冻可乐 - 瓦岗村民 8-22 09:10
我也来回答:
不管你有没有帮助我们,瓦岗寨8万村民将感谢你。。。。。

为防止灌水,您需要计算一道数学题: 答案:
36 + 26 = ? 请将计算结果填在上面

 
[]
©2007 PhpRes.COM