zoukankan      html  css  js  c++  java
  • 关于客户端接口分页sql语句

    今天突然翻到为客户端写分页数据的sql,发现其实逻辑不对。列表是按照id降序的

    当时这样写的:

    #翻上一页:
    select 字段 from 表 where id>lastId order by id desc limit pageSize
    #翻下一页:
    select 字段 from 表 where id<lastId order by id desc limit pageSize
    

    lastId是临近id,即上一页是最上面的id,下一页是最下面的id

    pageSize是页面条数

    显然,逻辑有问题。

    如果pageSize=3;id列表是这样的:

     14 13 12 11 10 9 8 7 6 5 4 3 2 1

    因为id降序,因此翻页是这样的:

    1 第一页:14 13 12
    2 第二页:11 10  9
    3 第三页:8  7   6 
    ...

    但实际上,后端接收三个参数:lastId,pageSize,direct。direct=0表示上一页,1下一页。

    lastId=9,并向下一页,则id<9 降序,得8 7 6,没问题;

    上一页,则id>9,如果只是降序则取出:14 13 12,显然应该是升序,即:10 11 12,然后再降序,返回给客户端:12 11 10

    因此,应该这样写

    1 #翻上一页:
    2 select * from 
    3 (select 字段 fromwhere id>lastId order by id  limit pageSize) temp
    4 order by id desc
    5 #翻下一页:
    6 select 字段 fromwhere id<lastId order by id desc limit pageSize

  • 相关阅读:
    JSONP跨域的原理解析( 一种脚本注入行为)
    用Navicat_SSH 连接数据库服务器
    ng-repeat && ng-options的故事
    The different between ng-grid & ui-grid
    Web工作原理
    js操作cookies方法
    人生苦短,我用Python(目录)
    哈希算法
    数据结构
    算法入门
  • 原文地址:https://www.cnblogs.com/woshimrf/p/4585161.html
Copyright © 2011-2022 走看看