2013-07-31 45 views
-1

這可能是一個相當直接的。我正在嘗試創建一個小應用程序。我有一個表單,用戶提交「buy_price」和「sell_price」。然後我試圖弄清楚他們是否已經虧損或盈利。在數據庫中設置一個能夠計算出「保證金」的專欄,例如「保證金coulmn = sell_price-buy_price」(以及如何執行此操作)會更好嗎?或者,它會更好地在PHP中做到這一點。列的總和等於,A - B

預先感謝您。

編輯:我使用一個數據庫,因爲我存儲的數據,然後他們可以查看他們的購買歷史記錄。然後,我想爲最高利潤率的人制作「最佳交易」部分。

+0

爲什麼你需要涉及數據庫?顯然很多關於這個簡單的要求的信息你沒有提到 – Anigel

+0

我個人覺得這樣一個簡單的計算應該由應用程序而不是數據庫來完成。我爲需要其他表中的信息的複雜存儲過程保存數據庫計算。但我不是專家(因此爲什麼這不是答案)。 – Gray

+0

你的問題是,「它會更好」,最終成爲一個意見。這不適合SO/SE。只有一個可證明的答案是網站的意圖。 [FAQ] – SQLMason

回答

3

我絕對不會在數據庫中存儲計算值,這很簡單 - 維護可能會超過效率的任何邊際收益​​。

即使沒有存儲該值,您仍然可以選擇是否在檢索時計算值(使用MySQL)或使用PHP進行渲染。

SELECT buy_price, sell_price, (buy_price - sell_price) AS margin FROM x 

SQL之外,我還是會去用在與PHP渲染計算它。

+0

謝謝你的回答。假設我選擇用PHP計算利潤率,那麼通過「最佳利潤率」來訂購難麼? – Liondedan

+0

如果您需要對大量數據進行排序,我實際上會使用MySQL - 並且可能會創建一個新的視圖來進行排序......但是您不必這樣做。在我給出的例子中,您可以添加一個'ORDER BY margin DESC | ASC'來完成排​​序。 – jterry

0

「更好」的定義非常依賴於您的應用程序。它通常指的是哪個操作更快,這將需要您運行基準測試(但我猜測它是PHP)。然而,速度對你來說可能不是問題,所以「更好」變得簡單,無論你更容易做到。這幾乎是肯定的PHP。

1

最好是做在數據庫中該計算,並在視圖中嵌入的值:

create view vw_table as 
    select t.*, (buy_price - sell_price) AS margin 
    from table t; 

爲什麼使用視圖(或其它數據庫中計算列)更好?

首先,確保在需要「邊距」的地方使用相同的定義和名稱。其次,使用視圖有助於將應用程序層與數據庫層分開。因此,您可以更改表格或列的名稱而不必必須重寫應用程序 - 您只需更改視圖即可。第三,在許多環境中,可以在大量數據上並行計算餘量,而不必在應用程序中按順序計算餘量。 (另一方面,稍微大量的數據被返回給客戶端。)

+0

+1,特別是解釋爲什麼它更好。 – nico

相關問題