数据表中的自定义分页
Posted
技术标签:
【中文标题】数据表中的自定义分页【英文标题】:Custom Pagination in datatable 【发布时间】:2021-09-06 17:59:42 【问题描述】:我有一个 Web 应用程序,我在其中从数据库中获取数据并显示在数据表中。我面临一个问题,因为我正在获取的数据有太多行(200 000)。所以当我查询类似select * from table_name;
我的应用程序卡住了。
有没有办法用 javascript 处理这个问题?
我尝试了分页,但我不知道该怎么做,因为数据表会为已渲染的数据创建分页?
有没有一种方法可以通过分页运行我的查询 后端?
【问题讨论】:
您的问题与JS无关,您应该在服务器中进行分页,使用SQL或使用您的服务器端语言(例如C#(LINQ)) 相关问题:What is the best way to paginate results in SQL Server @MehdiDehghani 您是否建议我不应该一次获取所有行并使用偏移查询获取有限的行。 @MehdiDehghani 但是我仍然如何获取所有行并将上述方法与数据表集成(分页) 是的,您应该始终获取要显示给用户的数据,(如果要显示 10 行,则获取 10 行,而不是 11 行或更多)您使用的是 php 还是 C# ?还是其他东西(作为后端)? 【参考方案1】:我在使用 mongodb 和 angularjs 时遇到了同样的问题。我使用服务器端分页。由于您有大量记录,您可以尝试使用相同的方法。
假设您在一页中显示 25 条记录。
后端:
-
使用 COUNT 查询获取记录总数。
select * from table_name LIMIT 25 OFFSET
$req.query.pageNumber*25 根据页码查询有限的记录;
前端:
-
不使用数据表,而是在 html 表中显示数据。
为下一页和上一页定义按钮。
在控制器/js 文件中为 pageNumber 定义全局变量。
当单击下一页按钮时将 pageNumber 增加 1 并且
按下 prev 按钮时减 1。
使用 COUNT 查询的结果将上限设置为 pageNumber
变量。(如果有 200 条记录,则限制为 200/25=8)。
所以基本上 select * from table_name LIMIT 25 OFFSET $req.query.pageNumber*25 将记录数限制为 25。当 req.query.pageNumber=1 时,它将偏移前 25 条记录并发送后 25 条记录。同样如果req.query.pageNumber=2,会偏移前2*25条记录,发送51-75条记录。
【讨论】:
好的,我试过了,但我尝试了页码而不是下一个和上一个按钮 我得到了页数(总行数/要显示的记录数),然后循环到该数字并创建了那么多按钮。 但是我现在面临的问题是按钮的样式很笨拙 @Gaurav 你不需要循环。您只需要根据页码查询您要在页面上显示的内容即可。 你能分享一下你想要做什么的代码 sn-p 吗?【参考方案2】:有两种处理方式。
-
第一种方式 - 在客户端处理分页
从数据库中获取所有数据并应用自定义分页。
第二种方式 - 在服务器端处理分页
每次你想调用数据库并根据页面大小获取记录。
【讨论】:
无法获取所有数据,因为它不可行,其次您是否建议在这种情况下使用偏移量,我将如何在前端(数据表)处理它 首先,您会在前端找到总记录,并根据总记录显示页码和页面大小(如 10、5 等)。点击页码后,调用数据库并根据页面获取所有记录。默认情况下根据页面大小获取第一条记录。【参考方案3】:您可以在 mysql 中使用 LIMIT
和 OFFSET
约束进行分页。我知道一次 2 lacs 数据会使性能变慢。但是正如您提到的,您必须为此使用JS
。因此请明确表示,如果您希望 js
作为前端,那么它对您没有帮助。但是正如您提到的,您有一个 Web 应用程序,如果该应用程序在 Node(as server)
上,那么我可以向您推荐方法,这对您有很大帮助。
使用 2 个变量,分别命名为 var_pageNo
和 var_limit
。现在使用mysql的行查询作为
select * form <tbl_name> LIMIT var_limit OFFSET (var_pageNo * var_limit);
根据这个查询做代码。用您想要的值替换变量。这将使您的性能更快,并将根据您指定的限制获取数据。
希望这会有所帮助。
【讨论】:
工作正常,但我将如何在前端提供这样的功能 为此,您需要告诉我更多关于您的代码的信息。先告诉我你用的是什么后端? 我正在使用 java以上是关于数据表中的自定义分页的主要内容,如果未能解决你的问题,请参考以下文章