Skip to main content

关于分页

理论分页

CountNPageSizeNCount=0    PageNumber1PageSize=0    PageNumber=[0,+)Count \in N \\ PageSize \in N \\ Count=0 \iff PageNumber \in {-1} \\ PageSize=0 \iff PageNumber = [0,+\infty) \\ PageSizeN    PageNumber={x:xCountPageSize}\textcolor{#bf033b}{PageSize \in N^* \iff PageNumber = \{x: x \in \lfloor \frac{Count}{PageSize} \rfloor\}}

Count=0 无结果

PageSize=0 无意义

GUI分页实现

CountNPageSizeNCount=0    PageNumber0PageSize=0    PageNumber=[0,+)Count \in N \\ PageSize \in N \\ Count=0 \iff PageNumber \in {0} \\ PageSize=0 \iff PageNumber = [0,+\infty) \\ PageSizeN    PageNumber={x:xCountPageSize}\textcolor{#bf033b}{PageSize \in N^* \iff PageNumber = \{x: x \in \lceil \frac{Count}{PageSize} \rceil\}}

Count=0 无结果

PageSize=0 无意义

SQL分页实现

countNlimitNoffsetNcount \in N \\ limit \in N^* \\ offset \in N

limit=0 无意义

对应关系

理论:SQL

offset={0if PageNumber=1PageNumberPageSizeif PageNumber>1offset= \begin{cases} 0 & \text{if } PageNumber=-1 \\ PageNumber*PageSize & \text{if } PageNumber \gt -1 \end{cases}

GUI:SQL

offset={0if PageNumber=0(PageNumber1)PageSizeif PageNumber>0offset= \begin{cases} 0 & \text{if } PageNumber=0 \\ (PageNumber-1)*PageSize & \text{if } PageNumber \gt 0 \end{cases}

实施

特殊的,如果在查询时数据已发生变化,即: offsetcountoffset \ge count,考虑用户体验,应修正为最后一页LastPageLastPage

理论

LastPage=CountPageSizeLastPage=\lfloor \frac{Count}{PageSize} \rfloor

GUI

LastPage=CountPageSizeLastPage=\lceil \frac{Count}{PageSize} \rceil

SQL

  • 理论: offset=offset=
  • GUI: LastOffset=LastPagePageSizePageSize=CountLastOffset=LastPage*PageSize-PageSize=Count