数据表中的自定义分页

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 中使用 LIMITOFFSET 约束进行分页。我知道一次 2 lacs 数据会使性能变慢。但是正如您提到的,您必须为此使用JS。因此请明确表示,如果您希望 js 作为前端,那么它对您没有帮助。但是正如您提到的,您有一个 Web 应用程序,如果该应用程序在 Node(as server) 上,那么我可以向您推荐方法,这对您有很大帮助。

使用 2 个变量,分别命名为 var_pageNovar_limit。现在使用mysql的行查询作为

select * form <tbl_name> LIMIT var_limit OFFSET (var_pageNo * var_limit);

根据这个查询做代码。用您想要的值替换变量。这将使您的性能更快,并将根据您指定的限制获取数据。

希望这会有所帮助。

【讨论】:

工作正常,但我将如何在前端提供这样的功能 为此,您需要告诉我更多关于您的代码的信息。先告诉我你用的是什么后端? 我正在使用 java

以上是关于数据表中的自定义分页的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net MVC Kendo Grid 的自定义分页

Laravel 5 中的自定义分页视图

使用带有 OData 提要 C# 的存储过程的自定义分页,没有实体框架

codeigniter分页类中的自定义查询

引导表服务器端分页的自定义参数

如何使用 MongoDB 中的自定义字段对分页进行索引和排序,例如:名称而不是 id