【问题标题】:PHP Is there a more efficient/faster way to query SQL and echo results?PHP 是否有更高效/更快的方式来查询 SQL 和回显结果?
【发布时间】:2017-11-22 08:01:45
【问题描述】:

我有一个查询最多可以返回 4000 个结果,并且在过去一年左右我一直在使用此代码

PHP - $results 是来自查询的数组

foreach ($results as $result) {

在上面的代码中,我让它打印出一个表格行,里面有一堆表格数据。这可能需要几秒钟才能加载。有没有更有效的方法来做到这一点?

【问题讨论】:

  • 使用分页。您需要在查询中添加LIMIT。阅读更多 - dev.mysql.com/doc/refman/5.7/en/limit-optimization.html
  • 该表已经使用 DataTables 进行了分页。如果我使用 LIMIT 分页,除非我添加大约 50 行代码,否则我将无法排序。
  • 等等,你用 PHP 对数据进行排序吗?为什么不用mysqlORDER BY
  • 不,我使用 DataTables 进行排序,我不需要在第一次查询时对它们进行排序,有用于排序的选项卡。

标签: php html arrays database


【解决方案1】:

把问题和cmets拼在一起,听起来像:

  1. 您执行查询并获得 $results。
  2. 您使用来自 $results 的格式化数据输出 HTML。
  3. 您使用 DataTables (+ jQuery) 客户端(浏览器)对结果进行排序。

更改您的 DataTables 配置以使用 serverSide 处理。来自 DataTables 网站:“服务器端处理 - 过滤、分页和排序计算都由服务器执行。”本质上,您让 DataTables 请求数据块,然后将这些请求转换为小的 MySQL 查询,使用 ORDER BY 匹配 DataTables 用户选择的排序和 LIMIT 匹配 DataTables 分页。根据 DataTables 网站,这可以使您从 5,000 - 50,000 行容量增加到数百万行。

【讨论】:

  • 问题不是DataTables,而是对SQL 数据库的PHP 查询。而且出于安全原因,我不能使用 javascript 来查询服务器。在我开始使用 DataTables 和页面等之前,我遇到了这个加载时间过长的问题。它只是回显一个 5 ,因为每个结果都加载很重。
  • 查询总是由 PHP 完成。问题是查询是作为一个大批量还是在多个小“块”中完成的。 DataTables 可以双向工作。如果您分块执行此操作,则 DataTables 将对另一个 PHP 脚本进行 AJAX 调用,以一次检索一大块数据。这样可以保证解决速度问题。这应该是一个安全问题,因为查询仍然是 PHP,而不是 Javascript。加载时间长仅仅是由于一次传输的数据量很大。由于您已经在使用 DataTables,请使用它来帮助解决问题。
  • 我只是要将页面转换为使用 xml 而不是 javascript,并每天在 php 中更新 xml 的服务器端。数据无需实时更新
猜你喜欢
相关资源
最近更新 更多
热门标签