ps=conn.prepareStatement("select top "+pageSize+" * from goods where goodsId not in (select top "+(pageNow-1)*pageSize+" goodsId from goods)");
这是在sql2005中写的代码,当前页面大小pagesize,pagenow表示当前页面,换用mysql怎么写这句查询语句,用原句在mysql中出错。

解决方案 »

  1.   

    呵呵,mysql是专门有分页的sql语法的,我举个例子select * from user limit 0,5;这样就可以了,0是指从哪一条数据开始,5就是读取多少条数据。
      

  2.   

    给你个MYSQL的分页过程,记得把分给我,呵呵BEGIN
    /*
    **************过程简介**************
    MYSQL5.0通用分页存储过程
    作者:xiaof
    日期:2009-03-08,妇女节完成哒,嘿嘿^^V
    说明:该过程实现了分页功能。支持where条件及order排序,但不支持group分组及多表级联查询由于MYSQL目前无法获取动态SQL返回值(需临时表支持,实现起来太复杂了,晕一个先@@)
    所以将总记录数及当前页数首先进行查询,然后再将总记录数及页数放到每一条记录中
    **************参数说明**************
    表名
    IN tableName varchar(100),
    字段名,多个字段以,分隔
    IN filedsNames varchar(100),
    每页显示记录数IN pageSize int,
    当前页IN pageIndex int,
    排序,多个排序以,分隔
    IN sortName varchar(500),
    where条件,多个条件以,分隔
    IN strWhere varchar(500)
    **************调用方法**************
    call PageDiv('t_user','vcName,vcPassword',3,1,'','')
    */
    DECLARE filedlist varchar(500);/*字段列表*/
    DECLARE counts int default 0;/*总记录数*/
    DECLARE intPages int default 0;/*总页数*/
    DECLARE strPages varchar(20);/*总页数*/ /*获取总记录数*/
    if strWhere=''||strWhere=null then
    set @sqlStr=concat("select count(*) into @counts from ",tableName);
    else
    set @sqlStr=concat("select count(*) into @counts from ",tableName," where ",strWhere);
    end if;
    PREPARE STMT FROM @sqlStr;
    EXECUTE STMT; /*获取总页数*/
    if strWhere=''||strWhere=null then
    set @sqlStr=concat("select count(*)/",pageSize," into @intPages from ",tableName);
    else
    set @sqlStr=concat("select count(*)/",pageSize," into @intPages from ",tableName," where ",strWhere);
    end if;
    PREPARE STMT FROM @sqlStr;
    EXECUTE STMT; /*总页数返回值小于1的,均按1取值;大于1但有小数位的,则通过截取字符串的方式加1*/
    if(@intPages<1) then
    set @intPages=1;
    elseif(@intPages>1) then
    set @strPages=cast(@intPages as char);
    if(INSTR(@strPages,".")>=0) then
    set @strPages=LEFT(@strPages,INSTR(@strPages,".")-1);
    set @intPages=cast(@strPages as char)+1;
    end if;
    end if; /*分页操作*/
    if filedsNames=''||filedsNames=null THEN
    set filedlist='*';
    else
    set filedlist=filedsNames;
    end if; if strWhere=''||strWhere=null then
    if sortName=''||sortName=null then
    set @strSQL=concat('SELECT ',filedlist,',',@counts,' as totalRecord ,',@intPages,' as totalPage FROM 
    ',tableName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
    else
    set @strSQL=concat('SELECT ',filedlist,',',@counts,' as totalRecord ,',@intPages,' as totalPage FROM 
    ',tableName,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
    end if;
    else
    if sortName=''||sortName=null then
    set @strSQL=concat('SELECT ',filedlist,',',@counts,' as totalRecord ,',@intPages,' as totalPage FROM 
    ',tableName,' WHERE ',strWhere,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
    else
    set @strSQL=concat('SELECT ',filedlist,',',@counts,' as totalRecord ,',@intPages,' as totalPage FROM 
    ',tableName,' WHERE ',strWhere,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);
    end if;
    end if;
    PREPARE stmt_strSQL FROM @strSQL;
    EXECUTE stmt_strSQL;
    DEALLOCATE PREPARE stmt_strSQL;
    END
      

  3.   

    select * from goods where 条件 limit 从第几条开始,每页多少条记录
      

  4.   

    select * from xxx limit 0,10;
      

  5.   

    select * from goods where 条件 limit 这里应该是从n-1条开始吧(n代表第几条),每页多少条记录
      

  6.   

    哎,楼主你度娘都不用啊!google也有啊!