我正在构建一个用于浏览我的融合表的表格式javascript前端。有些视图有过滤器和分组,我希望能够对结果进行分页。使用其他云数据库,如CouchDB& CloudMine,我可以在我的请求URL中放入& count = true来获取超出LIMIT的总行数。我需要一种方法来使用融合表获得该数字。
我只能想到两种选择,两种选择都很昂贵:
1)执行两个查询 - 使用LIMIT / OFFSET进行主查询,使用不带LIMIT / OFFSET的相同查询,并获取第二个查询的.length作为我的计数
2)执行一个没有LIMIT / OFFSET的查询,只使用数据子集
这两个选项都无法使用LIMIT / OFFSET来提高网络性能。有没有其他方法来计算?我甚至不能用COUNT()进行第二次查询,因为我使用GROUP BY。
感谢您的建议!
答案 0 :(得分:0)
我不知道如何将计数作为某种特殊参数接收。所以你只能进行一次seocond查询,但是不需要传输相同的数据,只是为了获得计数。
我使用的查询具有相同的WHERE
和GROUP BY
子句,但仅请求ROWID
。这样只需要传输少量数据。或者,您可以使用COUNT()
函数并简单地总结返回的值。
如果您想进一步减少网络负载,您只需执行一次此额外查询,并在客户端进行所有进一步计算(例如第3页,<count> - 3 * <no of rows per page>
或<count> + 1
如果用户添加一行)。
如果您的数据没有那么快地改变(或者甚至只是通过您的用户界面),那么这应该是可行的。我认为每个表运行一个额外的查询并不是那么糟糕。