2011-08-09 4 views
1

私はZend Frameworkを自分のウェブサイトに使用しています。私はPostgreSQLデータベースからいくつかのデータを取得したいと思います。この要求はうまく動作しますが、私はZendのでDISTINCT ON(e.id)に変換する方法がわからないDISTINCT固有の列でZendを使ってselectをビルドするには?

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行は取得できますが、明確な列はありません。

$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を使用して私のために働く –

答えて

1

ため

おかげdistinct onはSQL標準(end of page in Postgres documentation)の一部ではないので、あなたはおそらくZend Frameworkのでこれを行うことはできません。 Postgresはそれをサポートしていますが、理論上はサポートを提供しない別のデータベース接続を設定できるので、Zend Frameworkの一部ではないと思います。

特定のデータベース(この場合はPostgres)用に開発していることが事前に分かっている場合は、手作業で記述されたステートメントを代わりに使用できます。クエリ内で柔軟性を増やし、パフォーマンスを向上させると、もはやデータベースを切り替えることができなくなります。

次に、Postgres用にZend_Db_Apdapterをインスタンス化します。 SQLクエリーの結果を得るために利用できるさまざまなメソッドがあります。これについては、フレームワークのドキュメントReading Query Resultsから始まります。このルートを選択する場合は、Zend_Db_Adapter_Pgsqlクラスの独自のサブクラスを作成することをお勧めします。これは、あいまいなnull値を返し、エラーの原因を隠す代わりに、エラーの場合にデータ型を変換して例外をスローすることができます。

+0

答えをありがとう。他の解決策はありますか?たぶん私のSQLリクエストを書くためにzendのメソッド? – Salah

+0

はい、[クエリー結果の読み込み]リンク(http://framework.zend.com/manual/en/zend.db.adapter.html#zend.db.adapter.select)は、手書きクエリーのいくつかの例を示していますZFで –

関連する問題