2011-08-09 71 views
1

我爲我的網站使用Zend Framework,我想從我的PostgreSQL數據庫中檢索一些數據。如何使用具有DISTINCT特定列的Zend構建選擇?

我有這樣的要求:

SELECT DISTINCT ON(e.id) e.*, f.*, g.* FROM e, f, g 
WHERE e.id = f.id_e AND f.id = g.id_f 

這個請求工作得很好,但我不知道如何DISTINCT ON(e.id)與Zend轉換。 看來,我可以得到DISTINCT行,但沒有明確的列。

$select->distinct()->from("e")->join("f", "e.id = f.id_e") 
->join("g", "f.id = g.id_f"); 

有關如何使用不同的列進行選擇的任何想法?

感謝您的幫助

+0

對於那些想要使用MySQL的人來說,你可以和它在這裏記錄: http://framework.zend.com/manual/en/zend.db.select.html/#zend.db .select.building.distinct適用於我使用Zend 1.11.11和mysql 5.5.20 – 2012-08-15 09:31:33

回答

1

你也許不能因爲distinct on與Zend框架做到這一點並不SQL標準(end of page in Postgres documentation)的一部分。雖然Postgres支持它,但我會假設它不是Zend Framework的一部分,因爲理論上可以配置另一個不支持的數據庫連接。

如果您事先知道您正在開發特定數據庫(本例中爲Postgres),則可以使用手動書寫語句。您將在查詢中獲得更多靈活性,並以不再能夠切換數據庫爲代價的更高性能。

然後,您將爲Postgres實例化一個Zend_Db_Apdapter。有多種方法可用於獲取從Reading Query Results開始的框架文檔中描述的SQL查詢的結果。如果你選擇走這條路線,我建議創建一個Zend_Db_Adapter_Pgsql類的自己的子類。這是爲了能夠轉換數據類型並在發生錯誤時拋出異常,而不是返回含糊不清的值並隱藏錯誤原因。

+0

感謝您的回答。還有其他解決方案嗎?也許一個用zend來寫我的sql請求的方法? – Salah

+0

是的,鏈接[閱讀查詢結果](http://framework.zend.com/manual/en/zend.db.adapter.html#zend.db.adapter.select)指向手寫查詢的一些示例與ZF。 –

相關問題