分页(mysql,其余数据可使用类似方式)

分页(mysql,其余数据可使用类似方式)

分页(mysql,其他数据可使用类似方式)

作者:李义星,原创,转载请注明作者!

方法一:

表数据如图

假设两行是一页

取第一页直接查出(limit 2)

非第一页(假设第3页),那么先取出1-2页的数据

SELECT OP.PRODUCT_ID FROM openb2c.OPEN_PRODUCT OP

        WHERE BRAND_NAME=’001′

        ORDER BY OP.PRODUCT_ID LIMIT 4

这个时候可以直接用NOT IN (SELECT OP.PRODUCT_ID FROM openb2c.OPEN_PRODUCT OP

        WHERE BRAND_NAME=’001′

        ORDER BY OP.PRODUCT_ID LIMIT 4 )方式直接分页,但是这样会很慢,我们加入反排序:

SELECT OP.PRODUCT_ID FROM

    (

        #  取前N行记录

        SELECT OP.PRODUCT_ID FROM openb2c.OPEN_PRODUCT OP

        WHERE BRAND_NAME=’001′

        ORDER BY OP.PRODUCT_ID LIMIT 4

    ) OP

    ORDER BY OP.PRODUCT_ID DESC

    LIMIT 1

取出反排序后第一条数据,实际上对应的是图中的第四条数据

然后

大于运算(>)就可以取第四条以后的数据,并且设置了LIMIT,只取2条,效率比IN高出很多!

完整SQL:

#前N行中最大的哪行下一行开始取,读取数量为分页大小

SELECT * FROM openb2c.OPEN_PRODUCT OP

WHERE OP.PRODUCT_ID > (

  #前N行记录倒叙,并且只取第一条

  SELECT OP.PRODUCT_ID FROM

    (

        #  取前N行记录

        SELECT OP.PRODUCT_ID FROM openb2c.OPEN_PRODUCT OP

        WHERE BRAND_NAME=’001′

        ORDER BY OP.PRODUCT_ID LIMIT 57001

    ) OP

    ORDER BY OP.PRODUCT_ID DESC

    LIMIT 1

) AND

OP.BRAND_NAME = ‘001’

ORDER BY OP.PRODUCT_ID

LIMIT 20

然而这种方式只可在主键排序才能进行。所以介绍第二种方法

方法二:

//当有要求排序时

SELECT * FROM XXX ORDER BY XX LIMIT (页数 + 1)*页大小

然后从排序后的数据进行反排序,取出page大小的数据

SELECT * FROM(

SELECT * FROM  XXX ORDER BY XX LIMIT (页数 + 1)*页大小

) order by 反排序 limit 页大小

然后在按要求排序

SELECT * FROM

SELECT * FROM(

SELECT * FROM  XXX ORDER BY XX LIMIT (页数 + 1)*页大小

) order by XX (原来是升序就降序(反排序) limit pagesize数据量

) ORDER BY XX

和第一种方法排序的效率比较待测试

分页(mysql,其余数据可使用类似方式)

相关文章:

你感兴趣的文章:

标签云: