2010-09-18 183 views
1

我知道很多方法来避免重复PHP代码(在我的情况下PHP)。但是,我正在开发一个相当大的应用程序,它使用它找到的数据对数据库进行了一些计算,并且我注意到需要在其他地方使用相同的代码(部分SQL)。避免重复SQL代码?

我不喜欢一遍又一遍复制和粘贴同一个东西的想法。什么是这样做的好方法?我应该使用存储过程吗?我几乎可以计算出PHP中的一些东西,但大部分时间查询都是基于查询未返回的数据计算值,并且将额外数据返回给PHP以使其可以进行计算似乎很愚蠢。有时候这可能没问题,但现在感觉不太好。

我该怎么办?

例如,遍布在许多SQL查询我计算与此类似:

... 
(SELECT SUM(amount) FROM IT INNER JOIN Invoice I WHERE IT.invoiceId=I.id) AS total 
... 
FROM InvoiceTransaction IT 
... 

请注意,我在家里,所以我现在正在写这关我的头顶。

+0

哪个数据库?我假设它是MySQL,但你永远不知道...... – 2010-09-18 08:19:05

+0

哦,是的,它是MySQL。 – Tower 2010-09-18 08:33:37

+0

没有一个实际的例子就很难回答。 – 2010-09-18 08:36:04

回答

2

我觉得你有2个解决方案:

  1. 如果SQL返回的数据量小,我就干脆换了SQL调用的方法调用(如必要的参数化)称之为
  2. 如果SQL会处理大量数据,我会将这些数据保存在数据库中并使用存储过程。然后,您可以调用存储过程,而无需复制代码(但是在功能包的存储过程调用,并调用它 - 即如选项1)

我不一定会回避存储过程了。但我会建议保留业务逻辑(保留在应用程序本身中),并确保您有足够的单元测试。

1

我不喜欢存储过程,尤其不是为了重构。你应该考虑编写一个函数来返回你需要的记录,并且把你的SQL查询放在那个函数中,这样你就可以调用它,而不是把SQL放到任何地方。

1

我想我们需要一个查询的例子。存储特效可能是一个不错的选择。或者另一种选择可能是使用视图。在视图或存储过程中进行查询的一个优点是,您可以经常使用数据库来查看您的表的使用位置。缺点是你将自己锁定在一个数据库中,但无论如何你可能会这样做。