我想写个分页代码,每个页面显示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 ".....";
}

解决方案 »

  1.   

    既然你已经计算出起始的偏移,那为什么不用 limit 子句呢
    $query .= " limit $page_count_start,6";
    $result=queryMysql($query);同时删除循环中与 $stopwatch 相关的代码
      

  2.   

    楼主可能还不知道mysql有limit子句
      

  3.   

    在continue;前echo一下,如果看不到echo就是你的判断条件有问题。
    另外分页MySQL是使用limit实现的,而不是循环。
      

  4.   


    每次都看到您的回复,非常感谢!
    limit我之前用了一次 但是提示 说我的mysql版本不支持 后来传到jushost服务器里面也说不支持  所以后来放弃了 如果能用limit 那是再好不过了
      

  5.   

    mysql 怎么会不支持 limit 呢?
    要说 mssql 不支持还差不多
      

  6.   

    你不写limit,从数据库里取出来的东西当然每次都是一样的~
      

  7.   


    我试了下 
    $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'
      

  8.   


    现在又有新的问题啊  分页是出来了,但还是不管哪个页面显示的都是第一页啊 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++;
    }
      

  9.   

    我不是做php的,所以我说的,你选着看吧。
    做分页,我的做法是先用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,做了上面的处理后,不会出现超出范围的情况了。
      

  10.   

    $page_count_start = ($_GET['page'] - 1) * $each_page;
    是否要$_GET['page'] - 1看你的page是怎么传的。
      

  11.   

    很简单啊,接口传入page。直接select * from xxx limit page * n, n, 看看有没有结果就行了,有结果就显示,没结果拉倒。