避免重复SQL代码?

时间:2010-09-18 08:17:01

标签: sql mysql database

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

我不喜欢一遍又一遍地复制和粘贴同一件事的想法。有什么好办法呢?我应该使用存储过程吗?我几乎可以计算PHP中的一些东西,除了大多数时候查询基于查询未返回的数据计算值,并且将额外数据返回给PHP以使其可以计算它似乎很愚蠢。有时这可能没问题,但现在感觉不是这样。

我该怎么办?

例如,在我计算的许多SQL查询中都是这样的:

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

请注意,我现在在家,所以我把它写在了我的头顶。

3 个答案:

答案 0 :(得分:2)

我认为你有两个解决方案:

  1. 如果SQL返回少量数据,我只需在方法调用中包装SQL调用并调用它(根据需要进行参数化)
  2. 如果SQL处理大量数据,我会将数据保存在数据库中并使用存储过程。然后,您可以在不复制代码的情况下调用该存储过程(但将存储的proc调用包装在函数中并调用它 - 即在选项1中)
  3. 我不一定会回避存储过程。但我会建议保持业务逻辑不存在(保留在应用程序本身中),并确保你有足够的单元测试。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我认为我们需要一个查询示例。存储过程可能是一个不错的选择。或者替代方案可能是使用视图。在视图或存储过程中进行查询的一个优点是,您可以经常使用数据库来查看表的使用位置。缺点是您将自己锁定在一个数据库中,但无论如何您可能正在这样做。