具有总记录和分页的单个 SQL 查询

Posted

技术标签:

【中文标题】具有总记录和分页的单个 SQL 查询【英文标题】:single SQL query with total records and pagination 【发布时间】:2015-03-28 23:56:04 【问题描述】:

我有一个基于搜索参数提取记录的查询,我希望查询返回总记录以及基于开始和结束的分页,我必须运行两个查询还是有更直观的方法来在单个查询中执行。

SELECT * FROM page WHERE article_id = ? AND content like '%@%' //replacing @ with keyword

编辑: 寻找标准 SQL(实际使用 WebSQL)

【问题讨论】:

很大程度上取决于您使用的 DBMS 我正在使用 websql,所以非常想留在标准 sql 中 没有“标准”的结果分页方式 我很确定 SQLLite 是任何实现 WebSQL 的人使用的唯一数据库服务器。 SQLLite 确实有一个可以使用的 LIMIT 和 OFFSET。 SO上有很多线程可以满足您的需求:***.com/questions/14468586/… 【参考方案1】:

此查询将为每一行返回记录总数和实际页面(考虑到每页有 5 行)

select *, count(*) as total, (seq - MOD(seq, 5)) / 5
from (select id, row_number() over(order by id) as seq
      from page) a
join page b on b.id = a.id;

请注意,此查询仅适用于 Oracle,因为您没有指定您的 DBMS,这是我自己决定的,因此您可能需要进行编辑。

【讨论】:

实际上我确实提到了一些cmets,正在寻找标准sql,编辑我的问题,你能帮我采纳这个***.com/questions/19378892/… @user3610227:那个“标准SQL”(可能mod()除外) 我不能,它有一些我不知道的功能,例如overrow_number,我正在寻找一个基于 websql 的解决方案,可能请,错误could not prepare statement (1 near "(": syntax error)"【参考方案2】:

尝试使用子查询

count * from table where (select .....)

【讨论】:

谢谢,我找到了一个链接,但目前无法理解,请您帮忙***.com/questions/19378892/…

以上是关于具有总记录和分页的单个 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

具有大量记录的Sql Server分页

11.分页技术

Java中oracle分页查询01

使用具有通用页眉/页脚和分页的 WeasyPrint 生成 PDF

sql语句分页查询,如何同时返回记录总条数

分页的总记录数简单总结