Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 大型不可读SQL查询的组件化使其速度太慢,但缺乏核心概念定义证明是危险的_Php_Sql_Refactoring_Structure - Fatal编程技术网

Php 大型不可读SQL查询的组件化使其速度太慢,但缺乏核心概念定义证明是危险的

Php 大型不可读SQL查询的组件化使其速度太慢,但缺乏核心概念定义证明是危险的,php,sql,refactoring,structure,Php,Sql,Refactoring,Structure,我正在努力研究如何编写既能快速完成手头任务,又能结构良好的代码,以便将来可读和可维护 任务是用php生成销售报告,该报告利用SQL数据库中的数据。此报表返回数千行,每行表示一笔销售。报告的许多列必须在生成报告时计算,因为它们的值未存储在数据库中。我编写了一个大型SQL查询,它可以很快一次生成报告 我的问题是,这会造成代码重复,此外,对于某些人来说,从系统实体的角度理解SQL代码是非常困难的。例如,我的函数库中有一个函数,用于返回销售收到的金额。它调用下面的一段SQL来执行此操作 SELECT S

我正在努力研究如何编写既能快速完成手头任务,又能结构良好的代码,以便将来可读和可维护

任务是用php生成销售报告,该报告利用SQL数据库中的数据。此报表返回数千行,每行表示一笔销售。报告的许多列必须在生成报告时计算,因为它们的值未存储在数据库中。我编写了一个大型SQL查询,它可以很快一次生成报告

我的问题是,这会造成代码重复,此外,对于某些人来说,从系统实体的角度理解SQL代码是非常困难的。例如,我的函数库中有一个函数,用于返回销售收到的金额。它调用下面的一段SQL来执行此操作

SELECT SUM(amount) AS amount_received
FROM transactions
WHERE
    tran_status = 'Success' AND
    booking_id = $booking_id
在创建报告时,在我从数据库中获取数以千计的销售额后,为每个单独的销售额调用此函数一次太慢了。因此,我将下面的语句加入到SELECT语句中,以便销售从数据库中以AMOU received列的形式到达

SELECT booking_id, SUM(amount) AS amount_received
FROM transactions
WHERE tran_status = 'Success'
GROUP BY booking_id
在编写本报告时,我使用了许多不同的系统概念,我知道在多个地方定义这些关键概念是危险的,甚至我也很难阅读我的大量SQL查询。如有任何建议,将不胜感激


这是我有史以来的第一个问题,如果我做错了什么,非常抱歉…

在pma中用前导字符串“EXPLAIN”显示完整查询和执行完整查询

它看起来像一个N+1查询问题。无论您做什么,报告都将是一个独立的实体,并且需要额外的框架。考虑创建对单个对象查询的SET驱动替代方案,并将其插入多个对象集,无论是数组还是选择结构。使其足够灵活,以接收一组ID,然后将这些ID传递给各个组件以获取数据。然后你可以迭代这些庞大的集合来计算你所需要的。注意:这种方法非常占用内存,因为在触摸、输出数据之前,需要存储大量数据。我建议返回结果集,而不是填充的数组-无论如何,SQL server都会使用该内存


这样,你就可以得到你的定义,你有了一个更快(但仍然不是最优)的解决方案,然后报告就是关于你如何运行哪些结果集以及报告到页面的组成的对象。

答案很好,我没有足够的“声誉”来“投票”,但谢谢你。现在你说出来似乎很明显,但直到你指出它,我才明白。