Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.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_Mysql_Relational Database - Fatal编程技术网

Php Sql摘要表或动态聚合

Php Sql摘要表或动态聚合,php,mysql,relational-database,Php,Mysql,Relational Database,我有一个用php mysql构建的应用程序,它为我的公司处理分包商的发票 我的问题是 假设我有3种不同类型的发票,它们的计算(合计)根据类型的不同而不同。此外,根据授权用户的权限,返回的总数类型也有所不同 因此,我试图讨论处理这一问题的最佳方法: 我可以使用sql计算发票,我认为这是最快的,但需要在sql中使用业务逻辑 我可以在一个结果集中提取所有内容,然后在运行时使用php映射和计算发票 或者我倾向于使用不同的汇总表,在创建和更新发票时创建/更新汇总表,并使用mysql中的创建视图来控制如何返

我有一个用php mysql构建的应用程序,它为我的公司处理分包商的发票

我的问题是

假设我有3种不同类型的发票,它们的计算(合计)根据类型的不同而不同。此外,根据授权用户的权限,返回的总数类型也有所不同

因此,我试图讨论处理这一问题的最佳方法:

我可以使用sql计算发票,我认为这是最快的,但需要在sql中使用业务逻辑

我可以在一个结果集中提取所有内容,然后在运行时使用php映射和计算发票

或者我倾向于使用不同的汇总表,在创建和更新发票时创建/更新汇总表,并使用mysql中的创建视图来控制如何返回汇总表。我想这是最好的,但我不确定。这将导致映射过程变得更加困难,但它将允许所有业务逻辑保留在我的php类中,并简化我的sql选择

所以在我做任何事情之前,我只是想得到一些其他的信息


谢谢John,不要在MySQL查询中加入业务逻辑,因为这样可以避免,而不会影响性能

我将从最简单的方法开始,在本例中“在一个结果集中提取所有内容,然后在运行时使用php映射和计算发票”。对于一个相对低容量的数据库(如分包商发票数据库),任何方法都很快,可能根本不需要进行优化

如果您发现请求太慢,或者正在运行的数据处理成为某种瓶颈,那么请使用“汇总表”解决方案(假设这是一种既能提高速度又能在应用程序代码中保留业务逻辑的方法)


如果MySQL真的是实现快速查询的唯一方法,那么将业务逻辑放在MySQL中也没关系。但一般来说,避免这种情况。

+1在这一点上,如果您觉得处理太慢,我也同意您的看法。请分析使用的SQL语句,并在使用最多的列上创建索引,特别是那些在db级别涉及更多处理的列,如子句之间、总和、计数等。。。这也将大大加快处理速度,特别是如果表中有1000多条记录。谢谢,我非常喜欢在运行时进行映射和计算的想法,因为这会使所有内容保持逻辑性,但我担心这会使跟踪收集总数的更改变得非常困难,比如说,一份工作的所有发票的合计,或者一个供应商的付款期的所有发票的合计。除非我实施了一项策略来跟踪某些事件后发生的更改,例如编辑客户发票(供应商发票的集合加上额外利润)。有什么想法吗?@John,如果您需要执行计算,但由于您的数据结构太长,那么是的,您应该在数据库中缓存相应的子计算。(请注意,这并不一定意味着您必须有一个完整的摘要表来缓存最终计算——有时缓存部分计算并动态执行部分计算已经足够了)。好的,谢谢您的时间和输入。我现在对如何前进有了一个好主意