2013-06-03 88 views
0

我有這個疑問在我的PHP類:存儲過程VS PDO PHP PL/pgSQL的

$this->query = "SELECT a.x, b.y, c.z FROM aaa a INNER JOIN bbb b ON b.ida = a.ida "; 
    $this->query.= "INNER JOIN ccc c ON c.idb = b.idb WHERE a.ida = :ida"; 
    $this->stmtparam = array(':ida' => $this->ida); 
    return parent::fillArray(); // it fills a PDO FETCH_ASSOC array and returns it as JSON 

想,這是一個10倍以上覆雜的查詢和我有很多這樣的公司的信息系統;

我的問題是:是否有可能在postqresql中做一個存儲的函數,它執行相同的操作,並返回一個很多表的SET,然後將結果獲取到php中的關聯數組中?

它值得去做嗎?

+1

這取決於什麼這一切實際上是應該做的,但我會說,如果這是進行任何一種邏輯,通常建議將這種邏輯放在數據存儲層和應用程序代碼之外。 – Pudge601

+0

因此,假設我想返回2013-01-01員工工作的t_employee名稱,t_city ID,t_emp_salary工資,t_department名稱和t_department_manager名稱,那麼您會說這是一個「邏輯」情況,並且最好將它保存在應用程序層中? – user1626498

+0

@ Pudge601取決於它是什麼邏輯,可能最好將它保留在實際查詢中,例如,如果要存儲二進制文件但希望檢索十六進制值。 – GriffLab

回答

1

postgresql沒有存儲過程,但是你可以編寫一個基本上相同的函數。我更喜歡將複雜的查詢放入函數中。通過這種方式,您可以在數據庫端進行修復和性能改進,而不必每次都推出新的PHP代碼。

以下是一個演示如何創建一個PG功能和PHP調用它的資源: http://pgedit.com/resource/php/pgfuncall

+0

如果只是爲了「包裝」複雜的查詢,我寧願查看一個函數。 –

+0

確實如果只是一個查詢,它可以被包裝到一個視圖中以便於訪問。但是,如果它具有複雜的數據處理邏輯,您需要執行循環或計算或將數據收集到臨時表中,那麼函數將是首選。 – SuperFunkyMonkey