2016-07-21 9 views
0

に列とjsonbオブジェクト配列をマージ。私はこれらを照会し、単一の列への訪問者のデータ列とtrackingsをマージしたいは、私は、カスタム、ユーザ供給されたデータを格納するテーブル<code>visitors(id, email, first_seen, sessions, etc.)</code></p> <p>と別のテーブル<code>trackings(id, visitor_id, field, value)</code>を有する単一jsonbカラム

は、例えばdata

と呼ばれ、私は2つのtrackings

(id: 3, visitor_id: 1, field: "orders_made", value: 2) 
(id: 4, visitor_id: 1, field: "city", value: 'new york') 

と訪問者

(id: 1, email: '[email protected], sessions: 5) 
を持っていると言います

結果は

01の形式になります。

Postgres 9.4を使用してこれを達成する最も良い方法は何ですか?

答えて

0

私は追跡が悪い考えであると言うことから始めます。多くのものを追跡する必要がない場合は、代わりにjsonを保存してください。それがそのために作られたものです。あなたが追跡することがたくさんある場合、時間の経過とともに追跡のパフォーマンスに非常に不満を抱くでしょう。私はあなただけ一緒にすべてのそれらをスカッシュしていないお勧めします

SELECT row_to_json(email, sessions) FROM visitors WHERE ...; 

まずあなたがtrackingsからJSONオブジェクトが必要です。

-- WARNING: Behavior of this with duplicate field names is undefined! 
SELECT json_object(array_agg(field), array_agg(value)) FROM trackings WHERE ... 

は、訪問者のためのJSONを取得するには比較的容易です。 emailというフィールドがあるとどうなりますか?代わりに:

SELECT row_to_json((SELECT 
    (
SELECT row_to_json(email, sessions) FROM visitors WHERE ... 
) AS visitor 
    , (
SELECT json_object(array_agg(field), array_agg(value)) FROM trackings WHERE ... 
) AS trackings 
)); 
+0

こんにちは、どうしてトラッキングが悪いのですか?私はこのようにして、あなたがどのようにして通常どのようにリレーショナル・コンテキスト – Tarlen

関連する問題