2010-09-18 181 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

我想我們需要一個查詢的例子。存儲特效可能是一個不錯的選擇。或者另一種選擇可能是使用視圖。在視圖或存儲過程中進行查詢的一個優點是,您可以經常使用數據庫來查看您的表的使用位置。缺點是你將自己鎖定在一個數據庫中,但無論如何你可能會這樣做。