【问题标题】:single SQL query with total records and pagination具有总记录和分页的单个 SQL 查询
【发布时间】: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上有很多线程可以满足您的需求:stackoverflow.com/questions/14468586/…

标签: sql pagination web-sql ansi-sql


【解决方案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,编辑我的问题,你能帮我采纳这个stackoverflow.com/questions/19378892/…
  • @user3610227:那个“标准SQL”(可能mod()除外)
  • 我不能,它有一些我不知道的功能,例如overrow_number,我正在寻找一个基于 websql 的解决方案,可能请,错误could not prepare statement (1 near "(": syntax error)"
【解决方案2】:

尝试使用子查询

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

【讨论】:

猜你喜欢
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
相关资源
最近更新 更多