SQL Server:分页查询

打印 上一主题 下一主题

主题 876|帖子 876|积分 2628

一、分页查询

❓ 需求描述:客户端查询数据库数据并显示在表格中。在数据库中进行一次查询,查询结果有1050条记录,但表格row上限: 100,这时需要给本次查询记录分配 ? 页用来显示?
可以通过固定公式进行计算(c伪代码):
  1. # define TABLE_SHOW_ROW 100
  2. // 在大学学生表student中查询年龄小于19岁的学生信息,并按照日期/时间排序(默认升序)
  3. char sql_stat[] = {"select stu_id, stu_name, stu_age, stu_sex, date_time from student where stu_age < 19 order by date_time"};
  4. int num_of_rec = sql_record_total_query(sql_stat);
  5. char msg_page[1024] = {0};
  6. int page;
  7. int quotient= num_of_rec / TABLE_SHOW_ROW;
  8. int remainder = num_of_rec % TABLE_SHOW_ROW;
  9. if (num_of_rec > TABLE_SHOW_ROW)
  10. {
  11.     if (remainder > 0)
  12.         page = quotient + 1;
  13.     else
  14.         page = quotient;
  15. }
  16. else
  17. {
  18.     page = 1;
  19. }
  20. // 打印查询结果页面信息
  21. sprintf(msg_page, "1 of %d", page);
复制代码
上一页和下一页业务逻辑(c伪代码)
  1. int offset_val;
  2. int page_now = active_page_get(msg_page);
  3. if (event == click_page_up)        // 当客户端点击上一页
  4. {
  5.     offset_val = (page_now - 1) * TABLE_SHOW_ROW;
  6.     --page_now;
  7. }
  8. else if (event == click_page_down) // 当客户端点击下一页
  9. {
  10.     offset_val = page_now * TABLE_SHOW_ROW;
  11.     ++page_now;
  12. }
  13. char sql_stat[1024] = {0};
  14. sprintf(sql_stat, "select stu_id, stu_name, stu_age, stu_sex, date_time from student "
  15.                   "where stu_age < 19 order by date_time "
  16.                   "OFFSET %d ROWS FETCH NEXT %d ROWS ONLY", offset_val, TABLE_SHOW_ROW);
  17. sql_record_get(sql_stat, record);
  18. table_record_show(record);
  19. sprintf(msg_page, "%d of %d", page_now, page);
复制代码
二、参考引用

7.3 SQL Server分页查询

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表