2016-09-18 76 views
0

我試圖從兩個表中使用PostgreSQL函數的左連接來構建一個自定義JSON,但它無法工作。PostgreSQL數組內部的JSON對象

表結構:

id | title | description 

postPhoto

id | postId (FK) | name 

JSON例如:

{ 
    postId: 1, 
    title: '' 
    description: '', 
    postPhotos: [ 
     {id: 1, name: 'photo1.png'}, 
     {id: 1, name: 'photo2.png'}, 
    ] 
} 

SQL功能:

$BODY$DECLARE 
    success boolean; 
    msg text; 
    var_most_recent json; 
BEGIN 


SELECT to_json(array_agg(t)) INTO var_most_recent FROM (

    SELECT * 
     (SELECT to_json(array_agg(t)) FROM (
       SELECT * FROM postPhoto AS PP WHERE post.id = PP."postId" 
      )t) 
    FROM post 
    ORDER BY id DESC LIMIT 10 

)t; 

success = TRUE; msg = 'Successfully Returned Post data'; 
RETURN (SELECT json_build_object(
    'success', success, 
    'msg', msg, 
    'body', json_build_object(
     'mostRecent', var_most_recent 
    ) 
)); 

END;$BODY$ 

回答

1

我認爲你缺少的json_agg聚合函數。這是我會怎麼做:

SELECT json_agg(p) 
FROM 
    (SELECT 
     json_build_object(
      'postId', post.id, 
      'title', post.title, 
      'description', post.description, 
      'postPhotos', 
       (SELECT json_agg(json_build_object('id',id,'name',name)) 
       FROM postPhoto WHERE postId=post.id) 
     ) AS p 
    FROM post 
    ORDER BY post.id 
    LIMIT 10) as t 
WHERE json_array_length(p->'postPhotos')>1; 
+0

這工作,但我需要包裝多個職位在數組中,原因我沒有在那裏我有一個限制由10這樣的JSON應該是這樣的: HTTP:/ /pastebin.com/W3MSm8fh – Jazzy

+0

沒問題,我們可以將它包裝在另一個'SELECT'查詢中,查看我更新的答案。 – redneb

+0

你能幫我選擇postphoto不爲null的帖子嗎 – Jazzy