我有一个 PHP 应用程序从 MySQL 数据库中检索数据。当 PHP 查询数据库时,会提取结果并将所有输出行打印到屏幕上,但在顶部还会打印一个图表,以显示输出行。如下所示(这是一个 24 垂直线的条形图,因为 MySQL 从代表 PHP 执行的查询中产生了 24 行输出);
如果用户运行产生大量结果的查询,就会出现我面临的问题。再往下的第二张图片是在 PHP 应用程序中使用不同的可选参数代表 PHP 查询时 MySQL 生成的 150 个结果的可视化表示。我想要最大数量的垂直线(例如,让我们说 50 条)。当查询产生超过 50 行时,我们将 MySQL 结果合并为仅 50 行以进行可视化。我仍将打印图表下方的所有行,以便用户可以查看任何一个结果,如果他们愿意的话。我的问题是,在 CPU 周期方面做到这一点的最佳方法是什么,而不是太难以理解和遵循代码?
我的一个想法是在 PHP 应用程序中解决这个问题,我只需将 MySQL 输出的行数除以 50(再次假设简单的数字,在这种情况下舍入是一个简单的问题)。如果 MySQL 产生 500 行,500 除以 50 就是 10,所以我使用每 10 行在条形图上画一条垂直线。
另一个想法是在 MySQL 中解决这个问题。我也许可以运行 MySQL 查询,然后将结果复制到一个变量,然后针对每 10 行选择一次的查询运行第二个查询,或者如果有某种方法可以在 MySQL 中进行整合,然后呈现第二个较小的数据集到 PHP。
解决这个问题的最佳地点在哪里,为什么以及如何解决?
更新:
根据要求进一步解释,它确实是一个非常基本的场景:
结果如下所示,每一行是一个整数值和一个时间戳(条形图显示时间段[X轴]的值[Y轴]);
row | value | timestamp
1 | 10 | 1234-01-01 10:30
2 | 10 | 1234-01-01 10:35
3 | 15 | 1234-01-01 10:40
4 | 15 | 1234-01-01 10:45
5 | 10 | 1234-01-01 10:50
当 MySQL 产生 150 行输出时,我们得到类似于上面第二张图的结果。我正在尝试创建一个合并功能,因为如果查询产生 300 个结果或示例,条形图中的线条几乎不可见,因为它们太细了。这变成了不必要的视觉粒度级别。