javascript - 如何限制从数据库中获取的次数(编辑:使用分页)?
问题描述
所以我不知道我的标题是否有意义,但我希望我能在这里更好地解释一下:
我有这个代码:
let rsps = await Promise.all([
fetch(`/api/trace?id=${task.ID}`),
fetch(`/api/trace?parentid=${task.ID}`),
fetch(`/api/trace?where=${task.Where}`),
fetch(`/api/trace?kind=${task.Kind}`),
]);
现在,它正在按应有的方式工作,但是我遇到的问题是,在某些时候,它正在获取太多数据(例如,在某一时刻,它会从数据库中获取超过 4000 个对象,并且只占用处理能力太强)。
我的问题是:是否可以限制它应该获取多少数据点?就像也许做一个for
循环来结束我想要多少个数据点?我希望能够说出它可以获取的可能的 4000 个数据点,只获取前 200 个左右。这可能吗?
谢谢
解决方案
你应该使用分页。因此,可能的 fetch 调用可能是:
/api/trace?id=${task.ID}&page=1&per_page=20
这意味着您想要数据库中的前 20 个结果。
/api/trace?id=${task.ID}&page=2&per_page=20
这意味着您总是想要从数据库结果集的第 21 行开始的 20 个结果)。
所以page
让你创建你的偏移量来查询你的数据库。
偏移量在您的后端定义为:
偏移量 = 页 * 每页 - 每页。
因此,根据您传递的获取参数,在我提供的第二个示例中,偏移量将是:
偏移量 = 2 * 20 - 20 = 20
在这种情况下,您的数据库查询应该是:
SELECT ....
.....
LIMIT 20 OFFSET 20;
(我想要数据库中第 21 行结果集中的 20 个结果)
当然,您的前端应该知道整个结果集的基数,而不受后端的任何限制,以便创建分页结构。因此,对于每次获取,您的后端应该从数据库中发送预期的行和查询的总记录,没有任何限制。
推荐阅读
- android - 应用程序未配置为通过 Google Play 计费错误
- c++ - 如何在 vscode 中为程序设置默认输入
- javascript - 推送通知在实时生产服务器上不起作用
- chart.js - 使用图表颜色动态更改工具提示的背景颜色
- flutter - 如何使百分比指示器在颤动中以编程方式更改颜色?
- mysql - from_base64() 不解码回原始文本
- azure - 使用 Azure CLI/Powershell 获取逻辑应用的托管标识 ObjectID
- c# - Can I change the use of two ? : shortcuts to use the new switch expression syntax?
- sql - 当设置ValidateOnSaveEnabled = false,而代码执行到一半并退出
- java - 如何在詹金斯管道中获取 {env.WORKSPACE} 的父目录