我想写个分页代码,每个页面显示6种食物,但是好像跳不出循环,不管我进哪一页都是一样的
代码如下:$each_page=6;
$diff=$rows % 6;
$page_org=$rows / 6;
$count=1;
if($diff>0)
{
$page = floor($page_org+1);
}
else
{
$page = floor($page_org);
}
$page_count_start=0;
$page_count_end=0;
$stopwatch=0; if(!isset($_GET['page']) || (isset($_GET['page'])&&$_GET['page'])==1)
{
//echo "hello";
$page_num=1;
$page_count_end=$page_count_start + 6;
}
else
{
//echo "hello";
$page_num=$_GET['page'];
$page_count_start=$page_num + ($page_num-1) * 5;
$page_count_end=$page_count_start + 6;
}
$query="SELECT * FROM DISH WHERE dish_id IN (SELECT dish_id FROM CATEGORY_MENU WHERE cat_id=$cat_id)";
$result=queryMysql($query);
while($get_details=mysql_fetch_array($result))
{
$stopwatch++;
if($stopwatch<$page_count_start)
{
//$stopwatch++;
continue; //这里好像跳不出去,试了一下,不管进哪一页都是一样的
}
$dish_id=$get_details['dish_id'];
$dish_price=$get_details['dish_price'];
$dish_name=$get_details['dish_name'];
$dish_img=$get_details['img_url'];
$dish_descr=$get_details['dish_description']; //echo "$dish_id $stopwatch"; $page_count_start++; if($page_count_start==$page_count_end+1)
{
$stopwatch=0;
break;
}
//echo ".....";
}
代码如下:$each_page=6;
$diff=$rows % 6;
$page_org=$rows / 6;
$count=1;
if($diff>0)
{
$page = floor($page_org+1);
}
else
{
$page = floor($page_org);
}
$page_count_start=0;
$page_count_end=0;
$stopwatch=0; if(!isset($_GET['page']) || (isset($_GET['page'])&&$_GET['page'])==1)
{
//echo "hello";
$page_num=1;
$page_count_end=$page_count_start + 6;
}
else
{
//echo "hello";
$page_num=$_GET['page'];
$page_count_start=$page_num + ($page_num-1) * 5;
$page_count_end=$page_count_start + 6;
}
$query="SELECT * FROM DISH WHERE dish_id IN (SELECT dish_id FROM CATEGORY_MENU WHERE cat_id=$cat_id)";
$result=queryMysql($query);
while($get_details=mysql_fetch_array($result))
{
$stopwatch++;
if($stopwatch<$page_count_start)
{
//$stopwatch++;
continue; //这里好像跳不出去,试了一下,不管进哪一页都是一样的
}
$dish_id=$get_details['dish_id'];
$dish_price=$get_details['dish_price'];
$dish_name=$get_details['dish_name'];
$dish_img=$get_details['img_url'];
$dish_descr=$get_details['dish_description']; //echo "$dish_id $stopwatch"; $page_count_start++; if($page_count_start==$page_count_end+1)
{
$stopwatch=0;
break;
}
//echo ".....";
}
$query .= " limit $page_count_start,6";
$result=queryMysql($query);同时删除循环中与 $stopwatch 相关的代码
另外分页MySQL是使用limit实现的,而不是循环。
每次都看到您的回复,非常感谢!
limit我之前用了一次 但是提示 说我的mysql版本不支持 后来传到jushost服务器里面也说不支持 所以后来放弃了 如果能用limit 那是再好不过了
要说 mssql 不支持还差不多
我试了下
$query="SELECT * FROM DISH WHERE dish_id IN (SELECT dish_id FROM CATEGORY_MENU WHERE cat_id=$cat_id LIMIT 0, 3)";
浏览器给的错误提示:
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
现在又有新的问题啊 分页是出来了,但还是不管哪个页面显示的都是第一页啊 if(!isset($_GET['page']))
{
$page_num=1;
$page_count_start = 0;
echo "no page";
}
else
{
if(isset($_GET['page'])==1)
{
$page_num=1;
$page_count_start = 0; echo "page = 1, "; //page每次得到的值都是1 但是下面却是把page=2传过来了,不知道为什么page 一直等于1
}
else
{
$page_num=$_GET['page'];
$page_count_start=$page_num + ($page_num-1) * 5;
}
} $query="SELECT dish_id FROM CATEGORY_MENU WHERE cat_id='$cat_id'";
$result=queryMysql($query);
$rows=mysql_num_rows($result);
$each_page=6;
$diff=$rows % 6;
$page_org=$rows / 6;
$count=1;
if($diff>0)
{
$page = floor($page_org+1);
}
else
{
$page = floor($page_org);
} //echo $page; echo "$page_count_start"; $query="SELECT * FROM DISH WHERE dish_id IN (SELECT dish_id FROM CATEGORY_MENU WHERE cat_id=$cat_id) LIMIT $page_count_start, $each_page";
$result=queryMysql($query);
while($get_details=mysql_fetch_array($result))
{
// code...
}
while($page>0)
{
$page--;
echo "<a href='shop.php?dest_id=$dest_id&shop_id=$shop_id&cat_id=$cat_id&page=$count'>$count </a>";
$count++;
}
做分页,我的做法是先用count(*)查询一下一共有多少项是要查询的,然后除以每页要显示的条数(item),得到共有多少页(page),然后接收传入的页码数(inpage),如果inpage小于等于0或者为空,则将inpage改为1,如果大于page,则改inpage = page。
设置变量StartPage = (inpage-1)*item,
然后写sql文
select * from tab_name where 条件 limit StartPage,item;
这样就能根据传进来的参数查询了。
在页面,上一页直接用当前页-1,下一页直接用当前页+1,做了上面的处理后,不会出现超出范围的情况了。
是否要$_GET['page'] - 1看你的page是怎么传的。